mysql 主从复制笔记
本地测试采纳 docker 模仿部署
docker pull mysql:5.7# 启动masterdocker run -itd --name=mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # 启动 slavedocker run -itd --name=mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
这样两台mysql主机曾经部署实现,查看详情master : docker inspect mysql-master
进入master主机批改配置
docker exec -it mysql-master /bin/bash
# 批改位于 /etc/mysql/my.cnf 的配置,退出一下内容。须要装置一下 vi 或者 vim[mysqld]server-id=1 #惟一IDlog-bin=mysql-bin #开启二进制日志性能
创立从主机连贯用户
mysql -uroot -p123456# 创立用户CREATE USER 'slave'@'%' IDENTIFIED BY '123456';# 受权GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';# 退出重启容器docker restart mysql-master
进入slave主机批改配置
# 批改位于 /etc/mysql/my.cnf 的配置,退出一下内容。须要装置一下 vi 或者 vim[mysqld]server-id=2 # 留神这里的id 不能反复,必须惟一log-bin=mysql-slave-bin # 开启二进制日志性能,可作为其余 slave主机的masterrelay_log=edu-mysql-relay-bin# 退出重启容器docker restart mysql-slave
连贯 master 主机
mysql -uroot -p123456# 执行上面语句 其中 master_host 能够通过下面 docker命令查看 master主机的 IPAddresschange 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=0;#启动start slave;# 而后输出命令查看详情show slave status \G;# 如果这两个我的项目是 Yes 阐明万事okSlave_IO_Running: YesSlave_SQL_Running: Yes
往 master 写入数据,通过 slave 查问数据。的确是否同步。
奉上一份php测试伪代码
$master = new PDO('mysql:host=localhost:3307;dbname=test', 'root', '123456');$master->exec("INSERT test (name) VALUES ('master')");$slave = new PDO('mysql:host=localhost:3308;dbname=test', 'root', '123456');$data = $slave->exec("select * from test");var_dump($data);
其余命令参考
# 查看状态show slave status \G;show master status \G;# 进行启动IO线程STOP SLAVE IO_THREAD;START SLAVE IO_THREAD;
以上内容仅供学习参考,实在场景下请参考mysql官网文档!下一篇文章主从复制中常见谬误,以及解决形式!