您的位置:首页 > 数据库 > MySQL

Mysql之建立主从同步

2016-05-04 18:27 302 查看
Mysql主从同步原理:



主服务器每执行一个写操作,它都会往自己的数据库中存一份,与此同时这个写操作也会存储在二进制日志文件中一份,并且把它们保存为事件,所以在这个数据库上,前端数据每执行一个写操作或者有可能引起修改的操作,都会保存一个事件,

从服务器的IO-Thread线程从主服务器获取二进制文件,并在本地保存为中继日志,然后在从服务器通过SQL-Thread线程来从中继日志中一次读一个事件并且在本地执行一下,从而使从库与主库保持一致

主从同步的详细过程如下:
1. 主服务器验证连接。
2. 主服务器为从服务器开启一个IO线程。
3. 从服务器将主服务器日志的偏移位告诉主服务器。
4. 主服务器检查该值是否小于当前二进制日志偏移位。
5.  如果小于,则通知从服务器来取数据。
6.  从服务器持续从主服务器取数据,直至取完,这时,从服务器SQL线程进入睡眠,主服务器IO线程同时进入睡眠。
7. 当主服务器有更新时,主服务器IO线程被激活,并将二进制日志推送给从服务器,并通知从服务器SQL线程进入工作状态。
8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。

注意:

1.mysql版本一样

2.一定要打开主服务器log-bin(二进制文件)

3.server-id一定不一样

4.master和slave的hostname不能相同

5.两台服务器的时间同步

一、设置主服务器master:

#vim /etc/my.cnf

       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=13      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

#/etc/init.d/mysqld restart

二、设置从服务器slave:

#vim /etc/my.cnf

       log-bin=mysql-bin   //[不是必须]启用二进制日志

       server-id=12      //[必须]服务器唯一ID,默认是1,一般取IP最后一段
#/etc/init.d/mysqld restart

三、在主服务器上建立同步账号

mysql>grant   replication   slave   on   *.* to 'replication'@'%'   identified by    'replication'; 
mysql>flush  privileges;

四、锁主库表

mysql>flush tables with read lock; 

五、记录主库信息

mysql>show master status;

   +------------------+----------+--------------+------------------+

   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

   +------------------+----------+--------------+------------------+

   | mysql-bin.000004 |      308 |              |                  |

   +------------------+----------+--------------+------------------+

   1 row in set (0.00 sec)

记录下file(二进制文件名称)和position(二进制文件位置),这个界面不要关闭,防止主服务器再操作状态值会变化

六、另开一个终端,对现有数据进行快照备份:
#mysqldump -uroot -p --master-data=2    --databases    zabbix  >   zabbix.sql

--master-data 参数在导出zabbix.sql这个快照的时候,里面会记录着mysql二进制日志位置,通过 cat  /root/zabbix.sql  | grep  CHANGE MASTER 可以查看到二进制文件名称和二进制文件位置

七、解锁

mysql> unlock  tables;

八、将备份的数据库scp到从服务器上

#scp    /root/*.sql         root@192.168.11.12:/root/

九、配置从服务器Slave:
#mysql  -uroot  -p  <   dbdump.sql  

Mysql>change master to master_host='192.168.145.222',master_user='replication',master_password='replication',master_log_file='mysql-bin.000004',master_log_pos=308;  

Mysql>start slave;       
Mysql>show slave status \G;

如果Slave_IO_Running、Slave_SQL_Running状态为Yes则表明设置成功。

十、测试

Mysql>create database hi_db;

Mysql>use hi_db;

Mysql>create table hi_tb(id int(3),name char(10));

Mysql>insert into hi_tb values(001,'bobu');

Mysql>show databases;

主服务器上创建创建hi_db数据库,在从服务器上马上看到了效果。

Mysql>show  full  processlist;   观察期状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: