Mysql之建立主从同步

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;   观察期状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值