MySQL主从复制配置
一、master服务器配置
1)用户添加及授权
在master 服务器授权一个账户,拥有slave权限
1 2 | mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl' @ '备库ip' IDENTIFIED BY '备库密码' ; mysql> FLUSH PRIVILEGES; |
2)my.cnf配置修改
修改mysql配置文件,my.ini (windows)或 my.cnf(Linux)找到[mysqld] 标记,下方添加
server-id=1 log-bin=master-bin binlog-format=ROW # 以下两个为可选选项,如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份,日志文件的大小根据磁盘的性能做适当的调整 expire_logs_days = 7 // binlog过期清理时间 max_binlog_size = 1G // binlog每个日志文件大小 max_connections = 1000 character-set-server = utf8mb4 // 配置字符集 collation-server = utf8mb4_unicode_ci // 配置字符集 // 配置不同步的库 binlog-ignore-db = mysql binlog-ignore-db = sys binlog-ignore-db = information_schema binlog-ignore-db = performance_schema |
3) 重启master 的mysql服务
systemctl restart mysqld |
二、备库配置
在另一个mysql上配置从服务器
1) 备库my.cnf修改
找到my.ini (windows) 或 my.cnf (linux),找到[mysqld]标记,更改如下配置
[mysqld] max_connections = 1000 log_bin = slave-bin server_id = 2 relay_log = slave-relay-bin log_slave_updates = 1 read_only = 1 #以下两个为可选选项,如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份,日志文件的大小根据磁盘的性能做适当的调整 expire_logs_days = 7 //binlog过期清理时间 max_binlog_size = 100m //binlog每个日志文件大小 replicate_ignore_db=information_schema replicate_ignore_db=performance_schema replicate_ignore_db=mysql replicate_ignore_db=sys |
重启mysql使配置生效
systemctl restart mysqld |
三、开启复制
1)查看主库binlog信息
登陆主库执行
mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 154 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
|
执行之后可以获取目前主库binlog使用的文件及pos点
2)在从库上设置复制信息
根据上一步获取到的信息(Position, File)配置从库的复制信息,在从库上执行如下命令
CHANGE MASTER TO MASTER_HOST= '主库ip' ,MASTER_USER= 'repl' ,MASTER_PASSWORD= '主库密码' ,MASTER_LOG_FILE= 'master-bin.000001' ,MASTER_LOG_POS=154; |
3)在从库上开启复制
从库复制信息配置完成后执行命令开启复制:
mysql> start slave;
4)查看复制状态
启动之后如果不报错即可执行如下命令查看复制的状态:
show slave status \G;
主要查看下面两个参数状态,只要都是yes,表示主从通信正常。
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
如果均为yes则正常,否则需根据last_error信息进行调试