Mysql主从复制搭建
sudo docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=Gxy_201904 -d mysql:5.7
sudo docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=Gxy_201904 -d mysql:5.7
目录映射:
容器数据目录:/var/lib/mysql
容器配置文件目录:/etc/mysql/mysql.conf.d/mysqld.cnf
宿主主机目录:/data/mysql/data
例如:
docker run -itd -e MYSQL_ROOT_PASSWORD=Moguding123 --name slave -v /data/mysql/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql:5.7
[mysqld]
同一局域网内注意要唯一
server-id=100
开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
配置完成后重启容器,进入MySQL
show master status;
查看二进制文件名与位置,这个值要记住,在从容器上会用到
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER ‘develop’@’%’ IDENTIFIED BY ‘moguding123’;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘develop’@’%’;
到这里master容器配置完成,接下来运行一个slave容器
Docker run -d –name slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root mysql
进入slave容器,修改slave的配置
开启二进制日志,设置server-id,配置完成后重启服务
[mysqld]
设置server_id,注意要唯一
server-id=101 (要比主的值小)
开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
relay_log配置中继日志
relay_log=edu-mysql-relay-bin
4、若主库数据库已有数据,需要先锁定主库数据写入
mysql> flush tables with read lock; (锁定数据写入)
Mysql> unlock tables; (解锁表)
show master status;
打开MySQL会话,执行同步sql语句,同步master账号信息
change master to master_host=‘42.96.138.228’, master_user=‘develop’, master_password=‘Moguding123’, master_port=9627, master_log_file=‘mysql-bin.000001’, master_log_pos=1878, master_connect_retry=30;
start slave ;
使用show slave status\G;查看slave的状态,可以看到主从同步设置成功了
在配置主从复制的时候出了点小问题,Slave_Io_Running一直处于connecting状态,配置信息看着没错,就以为是网络问题,就去ping master容器,后来发现我ping的一直是slave的容器,那我的配置信息的IP自然也是slave的IP了,后来改了IP果断yes。
开始测试主从复制
我在master上创建了一个名为wanger的数据库,在slave可以查看到此数据库的存在