参考:
https://cloud.tencent.com/developer/article/1434695 (推荐)
https://zhuanlan.zhihu.com/p/335142300
https://juejin.cn/post/7070290856967667742
- 两台服务器,mysql版本必须一致
- 修改my.cnf文件参数
[root@mysql51 ~]# vim /etc/my.cnf
[mysqld]
log_bin=kyyyj-mysql-bin # 开启二进制日志 binlog-name
server_id=1 # 设置服务器id 主从id不可重复
expire_logs_days=7 # 日志过期删除时间
binlog_format=mixed # 主从复制模式:基于SQL语句的复制与基于行的复制混合
# 在主库上指定记录二进制日志的库或忽略的库(任选其一即可)
# binlog-do-db 二进制日志记录的数据库(多数据库用逗号,隔开)
# binlog-ignore-db 二进制日志中忽略数据库 (多数据库用逗号,隔开)
# replicate-do-db 设定需要复制的数据库(多数据库使用逗号,隔开)
# 也可以在从库配置如下
# replicate-ignore-db 设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
# replicate-do-table 设定需要复制的表
# replicate-ignore-table 设定需要忽略的复制表
# replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符
# replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符
[root@localhost]# systemctl restart mysqld # 重启mysql使设置生效
- 设置主从同步前,保证master和slave的数据一致。
## 导出 Master 库的时候进行锁表,导完后再解锁。
[root@master ~]# mysql -u root -proot
mysql> flush tables with read lock;
[root@master ~]# mysqldump --all-databases -uroot -proot > all_databases.sql
[root@master ~]# mysql -uroot -proot
mysql> unlock tables;
# 复制Master的备份本机到slave服务器
[root@master ~]# scp all_databases.sql root@192.168.1.9:/slave服务器保存路径
########################################
## slave从库导入数据
#方式一
[root@minion ~]# mysql -uroot -proot -hlocalhost -P3306 --default-character-set=utf8 < all_databases.sql
#方式二
[root@minion ~]# mysql -uroot -proot
mysql>source /root/all_databases.sql;
########################################
# 连接 Master 服务器
mysql>change master to master_host='192.168.5.5',master_user='replication',master_password='211212',master_log_file='master-bin.000001',master_log_pos=107;
########################################
# 启动从服务器(复制线程)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
# 查看主从状态
mysql>show slave status \G;
# 下面两项必须都是yes才表示配置成功,否则必须stop slave 检查配置修改正确后再次start slave
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
其他
# 是否启用binlog日志
show variables like 'log_bin';
# 查看详细的日志配置信息
show global variables like '%log%';
# 查看所有二进制日志列表
show master logs; 或 show binary logs;
# 查看最新一个binlog日志文件名称和Position
show master status;
# 查看 binlog 内容
show binlog events;
# 查看具体一个binlog文件的内容 (in 后面为binlog的文件名)
show binlog events in 'master.000003';
#https://juejin.cn/post/7135363385700384799
#mysqldump全量备份+mysqlbinlog二进制日志增量备份
#https://www.cnblogs.com/shamo89/p/9766228.html
#从库设置只读
set global read_only=1;