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

mysql的异步复制

2016-07-12 17:03 387 查看
mysql的复制
mysql从3.23版开始提供复制的功能,所谓的复制是将主数据的DDL和DML操作通过二进制日志传到复制服务器(也叫从库)上,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库保持数据同步。
mysql复制的优点

1:如果主库出现问题,可以快速切换到从库提供服务

2:可以在从库上执行查询操作,降低主库的访问压力

3:可以在从库上执行备份,以避免影响备份期间主库的服务

mysql的复制是异步的

mysql的复制通过3个线程实现的,其中Binlog Dump线程跑在主库上,IO线程和SQL线程跑在从库上。

首先从库创建IO线程,并向主库发起请求

主库收到请求,创建Binlog Dump线程读取数据库事件并发送给IO线程

IO线程取到事件数据后更新到从库的中继日志Relay log中

最后从库SQL线程读取中继日志Relay log更新的数据库事件并应用

异步复制步骤

1:创建一个用户,并授予REPLICATION SLAVE权限,

grant replication slave on *.* to '用户名' @ 'ip' identified by '密码';

2:在主数据库修改my.cnf,开启BINLOG,并设置server-id,修改这两个参数需要重新启动数据库才能生效。

[mysqld]

lob-bin = /home/mysql/log/mysql-bin.log

server-id = 1

3:在主数据库上,执行锁,防止有新的数据更新,以便获取一个快照

mysql>flush tables with read lock;

4:然后得到主库上当前的二进制日志名和偏移量,

mysql>show master status;

5:生成主库的备份,有很多方式,我这里直接生成tar包

6:主库备份完,马上执行解锁

mysql>unlock tables;

7:将主库备份的tar包拷贝到从库的数据目录下,解压

8:修改从库的my.cnf,增加server-id

[mysqld]

server-id=2

9:在从库上,使用--skip-slave-start启动从库,这样不会立即启动,有时间让我们配置

./bin/mysqld_safe --skip-slave-start & [1] 8768

Starting myslsd daemon with database from /home/mysql/data

10:对从库服务器做修改,指定主库的复制的信息

mysql>CHANGE MASTER TO

->MASTER_HOST='master_host_ip'

->MASTER_POST='master_host_post'

->MASTER_USER='第一步创建的用户'

->MASTER_PASSWORD='第一步创建的密码'

->MASTER_LOG_FILE='第四步查询到的file' 例如我的是mysql-bin.000008

->MASTER_LOG_POS='第四步查询到的position' 例如我的是14274500

11:在从库上启动slave线程;

mysql>start slave;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: