MySQL的主从复制
1. 环境说明 * docker启动 docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=HeXXXX mysql:8.0.18 --lower_case_table_names=1 * mysql.cnf中修改默认时区为上海 /etc/mysql/my.cnf [mysqld] default-time-zone='+8:00' * 主机: 阿里云的MySQL数据库 - mysql8.0.18 - mysql.hepengju.com 101.132.97.183 - root/HeXXXX * 从机: 腾讯云的MySQL数据库 - mysql=8.0.18 - mysql.hepengju.cn 118.24.46.154 - root/HeXXXX 2. 备份主机数据并再从机恢复 * 主机备份: docker exec mysql8 sh -c 'exec mysqldump --all-databases -uroot -pHeXXXX' > all_$(date +%Y%m%d).sql * 从机恢复: docker exec -i mysql8 sh -c 'exec mysql -uroot -pHeXXXX' < all_$(date +%Y%m%d).sql 3. 理论说明, 参考: https://www.cnblogs.com/hahahehexixihoho/p/10116061.html * 主机 1) 配置唯一的server-id 2) 开启二进制日志 3) 获得master二进制日志文件名及位置 4) 创建一个用于slave和master通信的用户账号 * 从机 1) 配置唯一的server-id 2) 使用master分配的用户账号读取master二进制日志 3) 启动slave服务 4. 操作步骤 * 主机 1) 修改mysql.cnf文件, [mysqld]之后加入以下配置 ``` [mysqld] server-id=1 log-bin=mysql-bin ``` 2) 重启mysql, 并创建用于同步的用户账号并分配权限 ``` CREATE USER 'repl'@'118.24.46.154' IDENTIFIED BY 'repl'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'118.24.46.154'; flush privileges; ``` 3) 查看master状态, 记录二进制文件名和位置 ``` show master status ``` * 从机 1) 修改mysql.cnf ``` [mysqld] server-id=2 ``` 2) 重启MySQL,打开mysql会话,执行同步语句(注意二进制文件和位置参数) ## 注意: MySQL8的参考手册 P240页 caching_sha2_password and Replication 部分 ``` change master to master_host='101.132.97.183', GET_MASTER_PUBLIC_KEY = 1, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=872; ``` 3) 启动slave同步进程并查看状态 ``` start slave; show slave status\G; # 当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了 ```