环境
主从库 | IP | Linux版本 | MySQL版本 |
---|---|---|---|
主库 | 101.201.xxx.11 | Linux version 3.10.0-514.6.2.el7.x86_64 | 5.7.22 |
从库 | 101.201.xxx.22 | Linux version 3.10.0-693.11.1.el7.x86_64 | 5.6.35 |
步骤
1. 创建用户并授权
主库某个用户授予从库IP的主从复制的权限
grant replication slave on *.* to repl22@'101.201.xxx.22' identified by 'xxxx';
flush privileges;
2. 修改MySQL
配置文件my.cnf
主库开启GTID复制模式
配置 | 释义 |
---|---|
server-id | 必须唯一,设置为IP尾段便于管理 |
binlog-format | 主从复制方式之一 |
gtid-mode | 开启GTID模式 |
enforce-gtid-consistency | 强制GTID的一致性,事务安全 |
lower_case_table_names | 表名不区分大小写 |
log-bin | 开启二进制日志 |
log_bin_index | 二进制的索引文件名 |
log-slave-updates | slave更新是否记入日志 |
replicate-do-db | 指定要复制的数据库 * |
vim /etc/my.cnf
server-id = 31
binlog-format = ROW
gtid-mode = on
enforce-gtid-consistency = true
lower_case_table_names = 1
log-bin = mysql-bin
log_bin_index = /var/lib/mysql/mysql-bin.index
log-slave-updates = true
replicate-do-db = targetDB
3. 重启MySQL服务,使配置生效
service mysqld restart
4.导出主库数据,导入从库
5. 查看主库的复制位置
show master status;
master_log_file | master_log_pos |
---|---|
mysql-bin.000003 | 1638 |
6.配置主从同步
从库
MySQL
安装目录下的bin
目录中执行/也可以在NaviCat
中执行
./mysql -uroot -p
mysql>use mysql;
mysql>stop slave;
mysql>change master to
master_host='xx.xx.xx.11',
master_user='repl22',
master_password='xxxx',
master_log_file='mysql-bin.000003',
master_log_pos=1638;
mysql>start slave;
mysql>show slave status\G;
主要观察下面几项即可
-Slave_IO_Running
:Yes
-Slave_SQL_Running
:Yes
-Log_File
Log_Pos
与master
的相同
有错可以看 last_Error
中的描述
7.双主互相复制的my.cnf
配置
#添加配置
auto_increment_increment = 10
auto_increment_offset = 1
auto-increment-offset、auto-increment-increment
两个参数用于在 双主(多主循环)互相备份。 因为每台数据库服务器都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突。 解决这个问题的办法就是让每个数据库的自增主键不连续。 上图说是, 我假设需要将来可能需要10台服务器做备份, 所以auto-increment-increment 设为10. 而 auto-increment-offset=1 表示这台服务器的序号。 从1开始, 不超过auto-increment-increment。这样做之后, 我在这台服务器上插入的第一个id就是 1, 第二行的id就是 11了, 而不是2.(同理,在第二台服务器上插入的第一个id就是2, 第二行就是12, 这个后面再介绍) 这样就不会出现主键冲突了。