mysql之主从复制
原理-->
在数据库层面,复制语句或者行,因为在数据库层面,故只有主服务器生成,并放到二进制日志里面,才能复制给从服务器.
![](http://images0.cnblogs.com/blog/507024/201405/201120301994297.png)
原理-->
mysql的主从复制基于异步,主要有三个进程执行,分别是主mysql上mysqldump进程,从mysqli/o进程和sql进程。
执行过程:主mysql上mysqldump进程接收到从mysql的I/O进程发出的请求后,读取本地binlog,并将数据通过3006端口发送给从mysql,从mysql的I/O进程将数据存放到中继日志中,同时在master-info存入所获取的binlog日志的文件名和位置,便于下次告知主mysql我上次从哪个地方复制的,之后从mysql的sql进程检测到中继日志有内容加入后,在从mysql本地执行新加的语句,并将执行的语句的结果,存入数据库。
目的-->
数据分布,进行读写分离,通过一主多从,实现主负责写,从负责读.
基 本步骤(主从)-->(若主节点已经运行一段时间,则首先要保证从节点内容和主节点一致,参考mysql之备份恢复)
主服务器:
创建具有复制权限的用户帐号-->
mysql>grant replication slave,replication client on *.* to repluser@'172.16.%.%' identified by '123456';
mysql>flush privileges;
设置server-id-->防止循环复制
#vim /etc/my.cnf
server-id=100
启用二进制日志-->修改日志为绝对路径,以及日志格式
vim /etc/my.cnf log-bin=/mydata/data/mysql-bin
binlog_format=mixed
全局锁表,防止数据库发生改变
mysql>FLUSH TABLES WITH READ LOCK;
查看主服务器锁表后此时的二进制名和日志位置,假设获取的内容是
mysql>show master status;
MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=107;
复制所有的数据库数据到从服务器上(保留权限),二进制日志文件可不复制.
解锁
mysql>unlock tables;
从服务器:
启用中继日志-->(可选:关闭二进制日志)
vim /etc/my.cnf
#relay log
relay-log=/mydata/data/relay-bin
#Read only
read-only=1#禁止从服务器自动启动skip-slave-start=1
设置server-id-->
#vim /etc/my.cnf
server-id=200
修改数据库权限为mysql.mysql
#chown -R mysql.mysql data_dir
启动复制线程-->设置连接属性,并启动(show slave status\G 查看从节点状态)
mysql>change master to MASTER_HOST='192.168.1.1',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=107;
mysql>start slave;
![](http://images0.cnblogs.com/blog/507024/201405/201120305901882.gif)
![](http://images0.cnblogs.com/blog/507024/201405/201120314659782.gif)
![](http://images0.cnblogs.com/blog/507024/201405/201120317779812.gif)
半同步模式(降低同步延迟问题)-->半同步模式需要插件支持,默认插件位置在/usr/local/mysql/lib/plugin
主服务器
mysql -uroot
#安装模块
mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql>set global rpl_semi_sync_master_enabled=1;
#等待从节点响应,若在timeout期间没有响应,则主节点降级为异步
mysql>set global rpl_semi_sync_master_timeout=1000;
同时也可以在配置文件中永久启用:
#vim /etc/my.cnf
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
从服务器
mysql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql>set global rpl_semi_sync_slave_enabled=1;
mysql>stop slave;
mysql>start slave;
![](http://images0.cnblogs.com/blog/507024/201405/201120314659782.gif)
![](http://images0.cnblogs.com/blog/507024/201405/201120317779812.gif)
同时也可以在配置文件中永久启用:
#vim /etc/my.cnf
rpl_semi_sync_slave_enabled=1
![](http://images0.cnblogs.com/blog/507024/201405/201120305901882.gif)
[星空刺]
|-->一颗星辰一闪即逝,支撑它的唯有方向和目的