MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。
1、可以作为一种备份机制,相当于热备份
2、可以用来做读写分离,均衡数据库负载
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
应该是 已经创建过用户了,需要先刷新权限,然后删除重建用户。