目录
MySQL主从同步机制
MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
MySQL主从同步的作用
1、可以作为一种备份机制,相当于热备份
2、可以用来做读写分离,均衡数据库负载
实现MySQL主从复制需要进行的配置:
1.主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号
2.从服务器:
配置唯一的server-id
使用master分配的用户账号读取master二进制日志
启用slave服务
前期准备
准备两台数据库版本一致(建议版本5.5以上)的mysql服务器
(如果是虚拟机的话可以先装好一台,然后克隆一台)
db1 192.168.64.134 主
db2 192.168.64.138 从
主服务器配置
1.修改my.cnf配置
前两行 my.cnf中默认有
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
# master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作
# 不同步哪些数据库
# binlog-ignore-db = mysql
# binlog-ignore-db = test
# binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db=test
修改好后,重启mysql服务
2.创建用于同步的用户账号
-- 创建用户
create user 'rep'@'192.168.64.%' identified by '12345678';
-- 授权
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.64.%';
-- 刷新权限
flush privileges;
-- 查看授权信息
show grants for 'rep'@'192.168.64.%';
-- grant replication slave on *.* to 'rep'@'192.168.64.%' identified by '12345678';
-- 有异常的话可以删除用户
-- drop user 'rep'@'192.168.64.%';
mysql> show grants for 'rep'@'192.168.64.%';
+---------------------------------------------------------------------------------------------------------------------------+
| Grants for rep@192.168.64.% |
+---------------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.64.%' IDENTIFIED BY PASSWORD '*84AAC12F54AB666ECFC2A83C676908C8BBC381B1' |
+---------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
3.查看master状态,记录二进制文件名(mysql-bin.000010)和位置(107)
mysql> show master status ;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 | 107 | test | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
从服务器配置
1.修改my.cnf
server-id=2
log-bin=mysql-bin
修改完成之后,重启mysql服务
2.执行同步sql,配置同步配置
(需要主服务器IP(或主机名),登陆凭据,二进制文件的名称和位置)
CHANGE MASTER TO
MASTER_HOST='192.168.64.134',
MASTER_USER='rep',
MASTER_PASSWORD='12345678',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000010',
MASTER_LOG_POS=107;
3.启动同步sql
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
4.查看同步状态
mysql> show slave status/G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.64.134
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000010
Read_Master_Log_Pos: 107
Relay_Log_File: db2-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 407
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
mysql>
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了
报错处理
搞不定了直接 重装mysql 或 回滚 快照。
ERROR 1665(HY000)
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using passwor
应该是 已经创建过用户了,需要先刷新权限,然后删除重建用户。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/database/276597.html