MySQL Replication主从复制(也称 AB 复制)允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。
复制的基本原理
复制过程分为三步:
- master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件
- slave将master的binary log events拷贝到它的中继日志(relay log)
- slave重做 中继日志中的时间,将改变应用到自己的数据库中,mysql复制是异步且串行化的
原理
slave会从master读取binlog来进行数据同步
基本原则
- 每个slave只有一个master
- 每个slave只能有一个唯一的服务器ID
- 每个master可以有多个slave
一主一从
mysql的版本最好一致,并且以后台服务运行
主从都配置在【mysqld】的节点下面,都是小写
主机、从机修改my.cnf配置文件
测试环境:
主节点:192.168.25.146
从节点:192.168.25.147
mysql版本:mysql-5.5.58
linux:centos7
1.配置主机
查询最开始二进制日志没有开启
show variables like 'log_bin';
vi /etc/my.cnf
在【mysqld】添加
log-bin=/data/mysqldb/log/mysql-bin.log binlog_format = ROW expire_logs_days=15 server_id = 2
重启mysql
/etc/init.d/mysql restart
然后再查询就发现开启了
查看主机日志
mysql> show master logs;
查看serverid
mysql> show global variables like '%server%';
主机给从机分配权限。最后的123456是数据库密码,@后面是允许连接的从机
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
查看主机状态
mysql> show master status;
2.配置从机
修改 /etc/my.cnf
#从服务器唯一ID server-id=2 #启用中继日志 relay-log=mysql-relay
启动mysql
mysql -uroot -p123456
重新配置主从
reset master;
复制主机的命令(全部复制执行),一定都是全英文符号,我就是吃这个亏了
CHANGE MASTER TO MASTER_HOST='192.168.25.146', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=107;
开始主从
start slave;
#查看从服务器状态
show slave status\G;
成功
报错
1.ERROR 1794 (HY000): Slave is not configured or failed to initialize properly.
You must at least set --server-id to enable either a master or a slave.
Additional error messages can be found in the MySQL error log.
修改 /etc/my.cnf
#从服务器唯一ID server-id=2 #启用中继日志 relay-log=mysql-relay
2.报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 需要修改初始化密码
mysql> alter user 'root'@'localhost' identified by '123456';
3.Slave_IO_Running: No,Slave_SQL_Running: Yes
解决办法:
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
start slave user=‘root’ password=‘123456’;
3.ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',
MASTER_USER=‘slave’,MASTER_PASSWORD=‘123456’,MASTER_LOG_FILE=‘mysql-bin.00’ at line 1
全英文符号,这个“,”是中文的