MySQL主从复制的几种复制方式
MySQL主从复制的几种复制方式 - itbsl - 博客园
CentOS8 安装 MySQL5.7 MySQL8.0 多版本,多实例 glibc tar.zg tar.xz
CentOS8 安装 MySQL5.7 MySQL8.0 多版本,多实例 glibc tar.zg tar.xz_躁动的青年的博客-CSDN博客
基于binlog文件的主从复制
IP | 角色 |
174 | master |
173 | salve |
修改主数据库的配置文件my.cnf,加入
简单配置
# 服务器的唯一标识(可以用IP结尾)
server-id = 174
# 开启mysql binlog功能,名字可自定义,一般是mysql-bin,(可以配置路径)
log-bin = mysql-bin
复杂配置
# 服务器的唯一标识(可以用IP结尾)
server-id = 174
# 开启mysql binlog功能,名字可自定义,一般是mysql-bin,(可以配置路径)
log-bin = mysql-bin
# 需要复制的数据库名,可配置多行(不指定复制所有)
binlog-do-db=dbname1
#binlog-do-db=dbname2
# 忽略复制得数据库,可配置多行
#binlog-ignore-db=information_schema
#binlog-ignore-db=mysql
#binlog-ignore-db=performance_schema
#binlog-ignore-db=sys
# 自动清理 7 天前的log文件
expire_logs_days=7
其他配置
# binlog记录内容的方式,记录被操作的每一行
# Default:ROW,Valid:MIXED,STATEMENT,ROW
binlog_format = ROW
# 减少记录日志的内容,只记录受影响的列
# Default:full,Valid:full,minimal,noblob
binlog_row_image = minimal
重启主服务
systemctl stop mysqld57
systemctl start mysqld57
查看server_id,log_bin变量
[root@bogon bin]# ./mysql -uroot -p
mysql> SHOW GLOBAL VARIABLES like 'server\_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 174 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%log_bin%';
+---------------------------------+----------------------------------------+
| Variable_name | Value |
+---------------------------------+----------------------------------------+
| log_bin | ON |
| log_bin_basename | /opt/mysql-5.7.30/data/mysql-bin |
| log_bin_index | /opt/mysql-5.7.30/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+----------------------------------------+
6 rows in set (0.00 sec)
在主数据库,创建用户复制得用户,并授权
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'myPassword21';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicator'@'%';
Query OK, 0 rows affected (0.02 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
查询主状态,(待会查询最新的,会用到)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 771 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
从数据库配置my.cnf,添加
简单配置
# 服务器的唯一标识(可以用IP结尾)
server-id = 173
复杂配置,从数据库也可以开启bin-log,供其他复制
# 服务器的唯一标识(可以用IP结尾)
server-id = 173
# 开启mysql binlog功能,名字可自定义,一般是mysql-bin,(可以配置路径)
log-bin = mysql-bin
重启从数据库
在从库上建立复制关系
mysql> change master to master_host='10.10.10.174', master_port=3306, master_user='replicator', master_password='myPassword21', master_log_file='mysql-bin.000005', master_log_pos= 771, master_connect_retry=60;
说明:
master_host 主服务器地址
master_port 主服务器端口号
master_user 主服务器用于复制的用户
master_password 主服务器用于复制的用户的密码
master_log_file 就是主服务器show master status; 中的 File
master_log_pos 就是主服务器show master status; 中的 Postion
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
13.4.2.1 CHANGE MASTER TO Statement
如果报错
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
在主从数据库分别查看server-id的配置是否生效
mysql> SHOW GLOBAL VARIABLES like 'server\_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 0 |
+---------------+-------+
1 row in set (0.00 sec)
修改完配置要重启数据库,停止后看看进程里是不是还有mysql。
在从数据库查看状态
mysql> show slave status \G
Slave_IO_Running: No
Slave_SQL_Running: No
在从数据库开启复制
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在从数据库关闭复制
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
在主数据库,建库,建表,增删改记录。
在从数据库查询,以上数据已同步。
如果从数据库不设置只读,数据复制会有问题,相同ID的数据不会更新。
从数据库
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Error: Could not execute Write_rows event on table test.user; Duplicate entry '4' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 4358
可尝试删除冲突的数据,关闭复制,开启复制,再查看状态。
或重新建立复制关系,指定日志文件,指定位置,(位置可以考虑从0开始)
16.1.6.1 Replication and Binary Logging Option and Variable Reference
16.1.6.2 Replication Source Options and Variables
16.1.6.3 Replica Server Options and Variables
16.1.6.4 Binary Logging Options and Variables
16.1.6.5 Global Transaction ID System Variables
MySQL 5.7 Reference Manual
2.3.4.2 Creating an Option File
4.2.2.2 Using Option Files