CentOS7 mysql5.7 主从复制

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 Replication and Binary Logging Options and Variables

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.2 Installing MySQL on Unix/Linux Using Generic Binaries

2.3.4.2 Creating an Option File

4.2.2.2 Using Option Files

5.1.2 Server Configuration Defaults

5.1.6 Server Command Options

5.1.7 Server System Variables (my.cnf中的属性的解释及默认值)

10.4 Connection Character Sets and Collations

16.1.6 Replication and Binary Logging Options and Variables (主从复制)

你可能感兴趣的:(mysql,CentOS,mysql,主从复制)