MySQL5.7.25在CentOS7.x中配置主从复制

环境

环境 版本
操作系统 CentOS7.3.1611 64位
MySQL mysql-5.7.25
VM虚拟机 VMware Workstation 12.5.7 build-5813279

主机

主从标识 IP
主库(master) 172.17.20.219
从库(slave) 172.17.20.217
  • 两台服务器的MySQL数据库使用的默认端口3306均已放行。
  • 关于在CentOS7.x上配置MySQL数据,参看:CentOS7.x使用yum安装MySQL数据库
  • 由于从库主机是从主库中clone而成,会造成一些问题,解决参看mysql主从复制之异常解决--- Slave_IO_Running: NO 之三大原因此文章的原因一可解决clone产生的问题。

一、主库配置

1、配置主库my.cnf

主库my.cnf文件配置如下(查看:egrep -v '(^$|^#)' /etc/my.cnf

配置文件参考1
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
default-time-zone = '+8:00'

# 数据库唯一ID,主从的标识号绝对不能重复
server-id=1
auto_increment_offset=1                  #自增id起始值
auto_increment_increment=2                #每次自增数字
log-bin = mysql-bin                           #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M                          #binlog单文件最大值
replicate-ignore-db = mysql                    #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
expire_logs_days=7 #自动清理7天前的log文件,可根据需要修改
配置文件参考2
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

character_set_server=utf8
#init_connect='SET NAMES utf8'
default-time-zone = '+8:00'

#数据库唯一ID,主从的标识号绝对不能重复。
server-id=1
#开启bin-log,并指定文件目录和文件名前缀
#log-bin = mysqlbin # 默认配置
#log-bin=mysql-bin # 自定义binlog名称配置
## 指定`/home/log/mysql`目录为binlog存放目录时,需要设置该目录为mysql权限
## 设置权限 chown mysql:mysql /home/log/mysql
log-bin=/home/log/mysql/mysql-bin # 指定目录存放
#二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days    = 10
#需要同步liting数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)。
binlog-do-db=db_sat_boss
binlog-do-db=radius
#不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。
binlog-ignore-db=mysql
#确保binlog日志写入后与硬盘同步
sync_binlog = 1
#跳过现有的采用checksum的事件,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none
binlog_checksum = none
#bin-log日志文件格式,设置为MIXED可以防止主键重复。
binlog_format = mixed
#如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志
max_binlog_size     = 100M
#表示 slave 将复制事件写进自己的二进制日志
log_slave_updates   = 1
#跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。
slave-skip-errors = all

#自增长起始值
auto-increment-offset = 1
#自增长步长
auto-increment-increment = 2
2、重启主MySQL
systemctl restart mysqld

重启前


MySQL重启前

重启后


MySQL重启后
3、主库配置复制用户
# 如果没有创建用户时使用
grant replication slave on *.* to 'root'@'%' identified by 'password';
# 已创建用户使用
grant replication slave on *.* to 'dev'@'%';
# 刷新权限
flush privileges;

至此,主库已经配置完成


二、从库配置

1、从库配置文件my.cnf如下
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
server-id = 2                               #server的唯一标识
auto_increment_offset = 2                   #自增id起始值
auto_increment_increment = 2                 #每次自增数字
log-bin = mysql-bin                           #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M                          #binlog单文件最大值
replicate-ignore-db = mysql                    #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
expire_logs_days=7 #自动清理7天前的log文件,可根据需要修改
2、重启从库MySQL
systemctl restart mysqld
3、配置slave

查看主节点日志情况

mysql> show master status;
主节点日志

在从库上配置同步数据的SQL语句,操作如下

mysql>change master to \
master_host='172.17.20.219', \
master_user='dev', \
master_password='123@#$.2018QPkc', \
master_log_file='mysql-bin.000001', \
master_log_pos=657;

如果出现Slave_SQL_Running:No,可以停掉从库(stop slave),手动执行上述语句。

  • master_password为创建dev时的密码
  • master_log_file文件名为上述“主节点日志”图片中File显示的文件名
  • master_log_pos为上述“主节点日志”图片中显示的Position

启动从节点

mysql> start slave;

查看状态

mysql> show slave status\G;
image.png

上图中下述两个状态必须为YES

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

三、验证

主库上进行如下操作

mysql> create database test;
mysql> use test;
mysql> create table test1(id int, name varchar(20));

从库上进行查看

mysql> show databases;

四、常用命令

# 查看my.cnf文件存放位置
mysql --help | grep 'Default options' -A 1

# 以下需登录mysql查看
show variables like 'log_%'; ## 查看日志开启情况
show master logs; ## 查看所有binlog日志列表
show master status;  ## 查看最新一个binlog日志的编号名称,及其最后一个操作事件结束点
flush logs; ## 刷新log日志,立刻产生一个新编号的binlog日志文件,跟重启一个效果
reset master; ## 清空所有binlog日志

文章参考

问题解决参考

  • mysql主从复制之异常解决--- Slave_IO_Running: NO 之三大原因
  • MySQL同步故障:" Slave_SQL_Running:No" 两种解决办法

MySQL主从等参考

  • CentOS7中MySQL5.7 主主互备配置
  • mysql主从复制配置
  • MySQL 8 双主设置
  • MySQL主从同步与主主同步

你可能感兴趣的:(MySQL5.7.25在CentOS7.x中配置主从复制)