该文档的MySQL数据库基于Docker设置两个实例,MySQL-Master和MySQL-Slave两个。
在使用Navicat for MySQL远程连接实例时,无法连接成功,需要进行如下设置:
命令:docker exec -it mysql-master bash
登录MySQL:root@1a435d89b15f:/# mysql -uroot -proot123
进行如下设置:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
即可进行登录。
主数据库配置:
docker exec -it 627a2368c865[容器的id] /bin/bash或
docker exec -it mysql-master[容器的名称] /bin/bash命令进入到Master容器内部。
cd /etc/mysql切换到/etc/mysql目录下
vi my.cnf 对my.cnf进行编辑
报出bash: vi: command not found,
需要在docker容器内部自行安装vim
先使用apt-get update命令
再使用apt-get install vim命令安装vim
在my.cnf中新增:
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
完成后,使用service mysql restart完成重启使生效。
重启mysql服务时会使得docker容器停止,需启动容器:docker start mysql-master
在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
从数据库配置:
操作同上,进入容器内部,修改my.cnf文件,文件修改如下:
链接Master(主)和Slave(从):
在Master进入mysql,执行show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
进入Slave 中mysql,执行如下命令:
change master to master_host='172.17.0.2', master_user='slave', master_password='root123',
master_port=3306, master_log_file='binlog.000003', master_log_pos= 437,
master_connect_retry=30;
命令说明:
1、master_host:Master的地址,指的是容器的独立ip;可通过如下命令获取
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave
2、master_port:Master的端口号,指的是容器的端口号(内部的端口,不是外部的)
3、master_user:用于数据同步的用户
4、master_password:用于同步的用户的密码
5、master_log_file:指定 Slave 从哪个日志文件开始复制数据,上文中的 File 字段的值
6、master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
7、master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
show slave status \G;--用于查看主从同步状
一般SlaveIORunning、 SlaveSQLRunning 都是No,使用start slave开启主从复制过程,若都为yes表明复制开始
若使用start slave开启主从复制过程后,如果SlaveIORunning:Connecting,连接出现问题,可进行修改,之后执行如下命令:
stop slave;
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=155, master_connect_retry=30;
start slave;
可以在slave的mysql中测试同步账号连接master数据库
root@9d8270cf51b4:/# mysql -uslave -h172.17.0.2 -p -P3306
可连接则证明账号密码无误
在start slave 时提示Relay log 导致复制启动失败,可进行如下解决:
reset slave;
start slave;