1.搭建环境
小编是在虚拟机上搭建了两台centos7系统,通过1Panel安装的Mysql5.7.44数据库(注意两个数据库的版本必须一致)
2.开始搭建主数据库
修改mysql配置文件,在[mysqld]下新增以下内容:
server-id = 1
binlog-do-db=master
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
log-bin=mysql-bin
binlog_format=row
#expire_logs_days=7
内容解释:
server-id = 1 -- 服务id,必须唯一
binlog-do-db=master -- 要同步的数据库
binlog-ignore-db=mysql -- 不需要同步的数据库
binlog-ignore-db=information_schema -- 不需要同步的数据库
binlog-ignore-db=performance_schema -- 不需要同步的数据库
binlog-ignore-db=sys -- 不需要同步的数据库
log-bin=mysql-bin -- 开启mysql的日志
binlog_format=row -- 日志格式化
#expire_logs_days=7
在修改配置文件之前,可以通过SHOW VARIABLES LIKE ‘%log_bin%’;查询日志是否开启,如果已经开启,则不用重复添加最后两行的log-bin=mysql-bin及binlog_format=row,如果是OFF状态就要添加最后两行
3.重启主数据库
重启之后,依次执行下面3条sql
-- 配置同步的账号,不建议用root
GRANT ALL PRIVILEGES ON *.* TO 'sys_copy'@'%' IDENTIFIED BY '123123' WITH GRANT OPTION;
-- 刷新配置
FLUSH PRIVILEGES;
-- 查看主数据库状态
SHOW MASTER STATUS;
4.配置从库
同样在[mysqld]下添加如下配置
server-id = 2
read_only = 1
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
master_info_repository=TABLE
relay_log_info_repository=TABLE
log-bin=mysql-bin
binlog_format=row
配置释义:
server-id = 2 -- 服务id,唯一的
read_only = 1 -- 设置只读,但是对超级管理员无效
relay-log-index=slave-relay-bin.index -- 中转(中继)日志后缀名,默认host_name-relay-bin.index,在datadir目录下
relay-log=slave-relay-bin -- 中转(中继)日志文件前缀名(base name) 也是默认在datadir目录下
master_info_repository=TABLE -- 把master.info(主从状态,配置信息)记录下来,默认记录到file里面,建议使用表记录
relay_log_info_repository=TABLE -- 用来决定slave同步的位置信息记录在哪里,同样有两个参数。如果relay_log_info_repository=file,就会创建一个realy-log.info,如果relay_log_info_repository=table,就会创建mysql.slave_relay_info表来记录同步的位置信息
log-bin=mysql-bin -- 开启日志
binlog_format=row -- 日志格式化
5.重启从库
重启之后执行下面sql语句
CHANGE MASTER TO
MASTER_HOST='192.168.200.134',
MASTER_PORT=3306,
MASTER_USER='sys_copy',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
释义:
CHANGE MASTER TO
MASTER_HOST='192.168.200.134', -- 主库ip
MASTER_PORT=3306, -- 主库端口
MASTER_USER='sys_copy', -- 第三步配置的主库同步用户及密码
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001', -- 第三步SHOW MASTER STATUS;查询到的File值
MASTER_LOG_POS=154;-- 第三步SHOW MASTER STATUS;查询到的Position值,因为Positon值在同步时候会发生变化,所以这里的值跟上述截图中值不一样,只需改成第一次查询到的值即可
查看从库状态
SHOW SLAVE STATUS;
需要注意Slave_IO_Running和Slave_SQL_Running的值都必须为YES才能证明主从复制配置成功,如果到这一步两个值都是NO的话,需要再次重启从库。
6.测试
测试之前,主库和从库都要有同样的数据库,否则会复制失败!
主库只建数据库,从库没有数据库,那在主库建表时会提示从库找不到库错误!