前言
- MySQL之间数据复制的基础是二进制日志文件(binary log file)
- 一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中
- 其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化
- 如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中
- 然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
准备的环境
- 操作系统:Linux
- 版本一致的mysql数据库
- 主库:192.168.253.130
- 从库:192.168.253.129
修改主库
1.在Linux上找到mysql配置文件my.cnf
进入配置文件在[mysqld]部分插入或修改
[mysqld]
#=========主从复制关键配置=====================
#二进制文件存放路径,存放在根目录data
log-bin=mysql-bin
#主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
server-id=1
#需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
#binlog-do-db=test
#不需要复制的库,和上项同理
#binlog-ignore-db=mysql
#=========主从复制关键配置=====================
2.重启mysql
service mysql restart
3.为从库创建对应的用户
首先连接mysql 使用 (mysql -u 用户名 -p 密码) 进行连接
#创建用户
CREATE USER 'slave'@'192.168.253.129' IDENTIFIED BY '123456';
#分配权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.253.129';
#刷新权限
flush privileges;
4.查看主库状态,日志文件名,日志位置(记录文件名与位置)
SHOW MASTER STATUS;
修改从库
1.同样找到msyql配置文件修改server-id
[mysqld]
#设置server-id,192.168.253.129
server-id=10
2.重启mysql
service mysql restart
3.打开mysql会话执行同步sql
从库 sql
CHANGE MASTER TO MASTER_HOST='192.168.253.130', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=936;
修改参数数据方式
#关闭slave
stop slave;
#修改参数数据
change master to MASTER_HOST='192.168.253.130';
#开启slave
start slave;
开启从库模式
start slave;
4.查看从库状态
show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。
5.如果Slave_SQL_Running为NO
#关闭slave
stop slave;
#设置SLAVE_SKIP_COUNTER
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2; START SLAVE;
#开启slave
start slave;
#再次查看
show slave status\G