在配置mysql主从复制时踩了很多坑,做个笔记备忘,也希望可以为大家提供帮助。
Master配置(基于docker):
1.docker安装mysql:
docker安装mysql比较简单,但是要注意提前准备挂载点目录!步骤简单说下吧。
# 1.下载mySql,默认最新
docker pull mysql
# 2.创建挂载点目录
mkdir -p /usr/local/mysql/log
mkdir -p /usr/local/mysql/data
mkdir -p /usr/local/mysql/config
# 3.运行创建容器
docker run -d \
-p 3306:3306 \
--privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=设置你自己的密码 \
--name mysql mysql:latest
2.配置字符集,防止中文报错:
注意:docker安装的mysql,/etc下没有my.cnf配置文件,需要自己新建! 执行以下操作:
# 进入配置目录
cd /usr/local/mysql/conf
# 修改/新建配置文件,my.cnf应该为空
vim my.cnf
# 复制以下配置并保存退出
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
# 重启mysql,使配置生效
docker restart mysql
到这准备工作已经做完,接下来开始正式配置主从复制。
3.配置master:
继续修改my.cnf文件,复制并保存以下内容:
# 进入/usr/local/mysql/conf目录
cd /usr/local/mysql/conf
# 修改my.cnf文件
vim my.cnf
# 复制并保存以下内容
[mysqld]
log-bin=mysql-bin # 启用二进制日志
server-id=100 # 服务器唯一id,也可以不设置为100
#重启mysql,使配置生效
docker restart mysql
二进制日志与服务器唯一id是必须配置的,还有一些其他的配置,需要的可以上网查查。
4.进入master容器实例登录数据库
# 进入数据库容器实例
docker exec -it 自己的容器名称(mysql) /bin/bash
# 登录数据库
mysql -uroot -p
5、在master容器实例mysql内创建数据同步用户
# 一条一条执行以下命令:
# 可以将'xiaoming'修改为其他名称,'123456'也可以修改为其他密码
CREATE USER 'xiaoming'@'%' IDENTIFIED BY '123456';
# 下面命令中的'xiaoming'需要与你自己设置的一致
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'xiaoming'@'%';
6.查看master状态,验证是否配置成功
# 查看master状态
show master status;
出现以下表格,证明配置成功:
slave配置(Windows环境下)
这里面的坑比较多,配置时花了挺长时间,注意跟着以下步骤完成:
1.查找配置文件:
windows下mysql的配置文件为:C:\ProgramData\MySQL\my.ini 。
注意:C:\ProgramData是一个隐藏目录,需要设置将隐藏目录显示出来,点击查看->点击显示->勾选隐藏的目录。
2.修改my.ini文件的可用权限:
my.ini文件的普通用户默认可用权限应该为只读,这时我们无法修改该文件,所以需要先修改权限:
右键点击my.ini文件 ->点击“属性”->点击“安全”->点击“Users”->点击“编辑”->点击“Users”->勾选"完全控制"->点击“应用”->点击“确定”->点击“确定”。
建议修这次使用结束后,将权限修改回去。
3.编辑my.ini配置文件
用记事本打开“my.ini”文件,在文件最后加上如下配置,id可以更改为其他唯一id:
[mysqld]
server-id=101
唯一id是必须配置的,其他非必须配置需要的自行上网查询。
4.navicat连接数据库或者直接mysql黑窗口启动mysql并顺序执行以下SQL
# 连接master与slave
change master to
master host = '192.168.116.130',
master_user='xiaoming',
master_password='zb185462',
master_log_file='mysql-bin.000001',
master_log_pos=717;
# 查看slave状态
show slave status;
此时,黑窗口会出现看似乱码但实际是一个表格的画面:
在navicat中看的比较清楚:
到这恭喜配置成功。