这里的配置指的是MySQL的my.cnf文件[mysqld]下进行配置。环境是Centos7.9+MySQL8.0,可以参考博文Centos7下使用RPM包安装MySQL8 。
如果是在虚拟机上操作并且是克隆方式生成的虚拟机(包含MySQL Server),则克隆的虚拟机MySQL Server的UUID相同,这是需要修改的。
vim /var/lib/mysql/auto.cnf
systemctl restart mysqld
【1】 主MySQL配置
建议MySQL版本一致且后台以服务运行,主从所有配置项都配置在[mysqld]节点下,且都是小写字母。
① 必选
主服务器唯一ID
# 主服务器唯一ID
server-id=1
#启用二进制日志,指明路径 log-bin=自己本地路径/mysqlbin
log-bin=mysqlbin
② 可选
# 0 默认 表示读写,1 表示只读
read-only=0
#设置日志文件保留的时长 单位是秒
binlog_expire_logs_seconds=6000000
# 控制单个二进制日志大小,此参数的最大和默认值是1GB
max_binlog_size=200M
# 设置不要复制的数据库
binlog-ignore-db=test
# 设置需要复制的数据库,如果不设置,则默认同步除忽略的之外的数据库
binlog-do-db=需要复制的主数据库名字
#设置binlog格式
binlog_format=STATEMENT
# --------其他亦可自行配置,比如数据目录--------
#错误日志
log-err=自己本地路径/mysqlerr
#根目录
basedir="自己本地路径"
# 临时目录
tmpdir="自己本地路径"
# 数据目录
datadir="自己本地路径/Data/"
重启后台MySQL服务,使配置生效。需要注意的是,建议先搭建主从配置,再创建数据库。MySQL主从复制起始时,从机不继承主机数据。
【2】从服务器配置
主要是从服务器唯一ID与二进制日志文件配置。
#[必选]
server-id=2
#[可选]如果默认已经配置,无需更改
log-bin=mysqlbin
#[可选] 启用中继日志
relay-log=mysql-relay
修改完配置需要重启MySQL服务。
【3】开启复制
① 主MySQL上建立账户并授权
在master上建立账户并授权给slave。
grant replication slave on *.* to 'slave1'@'从机数据库IP' identified by '123456'; # 5.5 ,5.7
flush privileges;
如果使用的MySQL8.0,需要如下的方式建立账户并授权salve。
#创建用户
create user 'slave1'@'%' identified by '123456';
#授予复制权限
grant replication slave on *.* to 'slave1'@'%';
#重置密码哦,必须执行
alter user 'slave1'@'%' identified with mysql_native_password by '123456';
#刷新权限
flush privileges;
查询master状态,并记录下file和position的值
show master status
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysqlbin.000001 | 1164 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
到这里暂时不要操作master,防止状态值变化,接下来设置slave。
② 从机配置需要复制的主机
从机上复制主机的命令:
change master to
master_host='主机IP',
master_user='主机用户名',
master_password='主机用户密码',
master_log_file='mysqlbin.具体数字',
master_log_pos=position数字;
举例:
change master to master_host='192.168.255.128',master_user='slave1',master_password='123456',
master_log_file='mysqlbin.000001',master_log_pos=1164;
启动slave同步
start slave;
如果报错如下:
可以执行如下操作,删除之前的relay_log信息。然后重新执行change master to ...
语句即可。
reset slave ; #删除slave数据库的relaylog日志文件,并重新启用新的relaylog文件
查看slave状态
show slave status
如果下面两个参数都是yes,则说明主从复制成功。
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
停止从复制功能
stop slave
重新配置主从,需要在从机上执行:
stop slave;
reset master;#删除master中所有的binlog文件,并将日志索引文件清空,重新开始所有新的日志文件--慎用!!