本博文仅记录个人学习
本博文针对MySQL 8.0 ,但MySQL5.7的搭建过程一模一样,只是修改mysql用户密码的命令有所区别,MySQL5.7也可以跟着一步步操作,应该不会有问题。
本文是全新搭建主从,如果主库有旧数据,不适用,之后会更新相关学习笔记
搭建 MySQL全新主从
- 默认主库与从库都没有任何数据,是全新数据库,刚刚安装完成后的状态!
- 如果数据库安装完成后修改了root密码,数据库会生成相应日志,建议在安装时主库与从库都采用非安全初始化,初始化完成后,不要修改root密码,主从搭建完成后,再在主库修改root密码。
检查主库状态
主库应该没有任何数据,或者少许数据(比如修改了root密码,那么会有少许的日志记录),最好是没有任何数据,主从搭建完成之后,再在主库修改root密码。
# 免密登录mysql,如果修改了root密码,需要添加-p参数登录
mysql -uroot
# 查看主库日志信息
mysql > show master status;
- 如果主库是完全干净的,没有修改密码,日志信息如下所示
- 如果修改了root密码,日志信息如下所示
- 如果修改了root密码,并且立刻刷新了用户权限信息,日志信息如下所示
如果结果与上述图片展示的不同,不确定是否只是修改了主库的root密码+刷新权限,为了确保后续步骤不受意外影响,可以选择重新安装Mysql8.0,并且以非安全方式初始化,再登录mysql,再次执行show master status
查看主库情况。
检查从库状态
特别注意!!!从库安装后不要有任何操作
从库应该没有任何数据,登录mysql后,执行下方命令进行检查
# 免密登录mysql
mysql -uroot
# 查看从库日志信息
mysql > show master status;
- 从库如果是完全干净的,那么日志信息如下
- 如果从库没有进行任何操作,比如仅仅是重启了一下,日志信息也会会发生变化,如下
此时需要执行,将日志记录清空即从000001开始重新记录日志reset master
如果结果与上述图片展示的不同,为了确保后续步骤不受意外影响,可以选择重新安装Mysql8.0,并且以非安全方式初始化,再登录mysql,再次执行show master status
查看从库情况。
检查配置文件
- 请检查主库与从库的配置文件是否配置了以下参数
- 如果使用了本文的安装脚本,请务必再次检查参数配置,特别是从库的read_only参数需要设置。
- 当设置
read_only=on
表示本数据库只能读不能写(root用户仍可以写),注意,当需要进行主从切换时,主库与从库的read_only
参数也要相应的进行更改!!!!!
主库参数检查
# 主从复制依赖于mysql的二进制日志,开启主从复制的必要前提,需要设置
# 例子:log_bin=/dbdata/mysql3306/log/mysql-bin
log_bin=参照例子
# 主从复制中各节点的身份id,主库与从库的server_id不能相同,一般设置为正整数
server_id=正整数类型,主库从库的server_id不能相同
# 从节点回放日志存放路径,
# 例子:relay_log=/dbdata/mysql3306/log/mysql-relay-bin
relay_log=参照例子
# 以下为必要条件,不需要人为设置参数值,直接设置即可
gtid_mode=ON
enforce-gtid-consistency=true
log-slave-updates=1
relay-log-info-repository=TABLE
relay_log_recovery=1
master-info-repository=TABLE
binlog-format=row
从库参数检查
注意!!!!一般从库不允许写操作,只允许读,所以从库的配置文件需要额外添加一个参数read_only=on
# 从库额外需要的参数,添加后,非root用户连接从库后,只能进行读操作
read_only=on
# 主从复制依赖于mysql的二进制日志,开启主从复制的必要前提
# 例子:log_bin=/dbdata/mysql3306/log/mysql-bin
log_bin=参照例子
# 主从复制中各节点的身份id,主库与从库的server_id不能相同,一般设置为正整数
server_id=正整数类型,主库从库的server_id不能相同
# 从节点的回放日志存放路径,需要设置
# 例子:relay_log=/dbdata/mysql3306/log/mysql-relay-bin
relay_log=参照例子
# 以下为必要条件,不需要人为设置参数值,直接设置即可
gtid_mode=ON
enforce-gtid-consistency=true
log-slave-updates=1
relay-log-info-repository=TABLE
relay_log_recovery=1
master-info-repository=TABLE
binlog-format=row
搭建主从
主库
主库需要创建专门用于主从复制的用户
# 免密登录mysql,如果修改了root密码,需要添加-p参数登录
mysql -uroot
# 创建用户
mysql > create user repl@'从库的IP地址' identified with mysql_native_password by '复制用户的密码'
mysql > grant replication slave on *.* to repl@'从库的IP地址';
mysql > flush privileges;
查看主库日志状态
mysql > show master status;
从库
再次检查从库日志状态
# 免密登录mysql,如果修改了root密码,需要添加-p参数登录
mysql -uroot
mysql > show master status;
- 日志信息应该显示为,如果不是,请参考“检查从库状态”小节
设置主从复制节点信息
# 免密登录mysql
mysql -uroot
# 执行下方语句
mysql > CHANGE MASTER TO MASTER_HOST='主库的IP地址',
MASTER_USER='repl',MASTER_PASSWORD='复制用户的密码',
MASTER_PORT=3306,
MASTER_AUTO_POSITION=1;
开启主从
# 设置好主从复制相关参数后,开启主从复制
mysql > start slave;
检查主从复制状态,出现两个yes,并且日志号与主库相同表示搭建成功
mysql > show slave status\G