一、概述
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种
分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复
制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志
文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连
接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发
生的任何更新,然后封锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免
用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
mysql支持的复制类型:
(1):基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采
用基于语句的复制,效率比较高。
一旦发现没法精确复制时, 会自动选着基于行的复制。
(2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
复制解决的问题
MySQL复制技术有以下一些特点:
(1) 数据分布 (Data distribution )
(2) 负载平衡(load balancing)
(3) 备份(Backups)
(4) 高可用性和容错行 High availability and failover
复制如何工作
整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。
下图描述了复制的过程:
二、主库上操作
1、开启log-bin功能
[root@iZj6ce4g7isnghh92hyiugZ ~]# grep log-bin /etc/my.cnf log-bin=mysql-bin 2、确保server-id不能相同
[root@iZj6ce4g7isnghh92hyiugZ ~]# grep server-id /etc/my.cnf server-id = 1 3、在主库上添加授权账户rep
登录mysql建立复制账号
grant replication slave on *.* to rep@"%" identified by 'xxxx';
4、锁表,查看binlog文件及位置点
锁表禁止数据写入
flush tables with read lock; show master status; mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000016 | 1366080 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) 5、新开窗口导出全备
mysqldump -uroot -pxxxx -B xxx>blog.sql
6、打开锁表,开放用户写入
unlock table;
三、从库操作
1、确保server-id不同
[root@zabbix ~]# grep server-id /etc/my.cnf server-id = 3
2、主库的备份导入从库
mysql -uroot -pxiaowei123@ <blog.sql
3、找位置点(填写主库里的记录点),配置master.info
CHANGE MASTER TO MASTER_HOST='xxxx', MASTER_PORT=3306, MASTER_USER='rep', MASTER_PASSWORD='xxxx', MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=1366080;
4、开始同步
start slave; Query OK, 0 rows affected (0.00 sec)
5、显示同步状态
show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 47.52.0.92 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000016 Read_Master_Log_Pos: 1369614 Relay_Log_File: mariadb-relay-bin.000011 Relay_Log_Pos: 391 Relay_Master_Log_File: mysql-bin.000016 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: 1369614 Relay_Log_Space: 72199 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)
如果显示
Slave_IO_Running: Yes Slave_SQL_Running: Yes
代表同步成功
- 转载请注明来源:mysql主从同步的配置
- 本文永久链接地址:http://www.hongxiaowei.com/xiaowei/317.html