一、mysql的主从复制原理
什么是二进制日志文件?
二进制日志文件包含的内容比较多,简单来说,就是每一个修改了数据库内容的操作或者可能会修改数据库内容的操作都会被记录到日志文件中去,我们可以通过日志文件把还原数据。反正就是日志文件很重要,通常用来做备份和还原。
什么是中继日志文件?
中继日志文件一般来讲只是在主从或者主主这种通过复制二进制文件的方式的模型中产生的文件,简单来说,就是在从服务器设备上通过I/O线程复制过来的文件,和二进制文件的内容相同。
主从复制的原理步骤
1、master创建Dump线程通过套接字把自己的二进制文件传送给slave。
2、slave创建I/O线程接受二进制文件并保存入本地中继日志文件中。
3、保存完中继日志文件之后,slave通过mysql线程一步一步读取中继日志文件的内容,还原主服务器的所有操作。
复制过程产生的线程
master: dump
slaver:IO_Thread, SQL_Thread
二 、mysql的简单的主从复制
关于mysql的安装不在进行赘述,详情参考http://blog.sina.com.cn/s/blog_13c38100b0102x1pe.html
以下步骤的前提是有两个mysql服务器,版本就好一直,一个为主,一个为辅,安装成功
master: 192.168.72.133
slave: 192.168.72.134
1、master服务器的配置
<1>、启动二进制日志
log-bin=master-bin
log-bin-index=master-bin.index
<2>、 选择一个为一个的server-id
server-id = 1
<3>、创建具有复制权限的用户
mysql> GRANT REPLICATION SLAVE ON *.* TO
'repluser'@'192.168.72.%' IDENTIFIED BY 'replpass';
mysql> FLUSH PRIVILEGES; 刷新授权表
具体的配置文件如下图所示:
为了事物的安全,要同步二进制文件
sync-binlog=on
2、slave服务器的配置
<1>、启动中继日志
<2>、选择一个唯一的server-id
<3>、连接至主服务器,并开始复制数据
查看服务器的日志文件
mysql> SHOW master status ;
+------------------+----------+--------------+------------------+
| File
| Position | Binlog_Do_DB | Binlog_Ignore_DB
|
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |
430 |
|
|
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
连接至服务器
mysql> CHANGE MASTER TO MASTER_HOST='192.168.72.133'
,MASTER_USER='repluser',
<4>、从服务器只读方式
read-only = on
具体的配置文件如下/etc/my.cnf
三、实现主从半同步复制
什么叫做半同步复制呢?
当主服务器进行mysql操作的时候,要等从服务器中的任何一台回复响应之后才可以进行操作。此处的配置都是在上面的操作基础上进行的。
1、master的配置
mysql> install plugin rpl_semi_sync_master SONAME
'semisync_master.so';
mysql> SHOW GLOBAL VARIABLES LIKE '%rpl%';
查看关于rpl的全局变量
mysql> set global rpl_semi_sync_master_enabled=on;
启动主服务器的半同步设置,只是暂时有效
2、slave的配置
mysql> install plugin rpl_semi_sync_slave SONAME
'semisync_slave.so';
mysql> SHOW GLOBAL VARIABLES LIKE '%rpl%'
mysql> set global rpl_semi_sync_slave_enabled=on
;
mysql> stop slave;
要重启从服务器的slave半同步才可以生效
mysql> start slave;
实现了半同步之后,每一步的操作延迟时间相应的增加。当全部的从服务器失效之后,主服务器会超时,一旦超时,主服务器会自动的切换到异步模式。
三、数据库的过滤
replicate-do-db
replicate-ignore-db
replicate-wild-do-table
replicate-wild-ignore-table
replicate-do-table
replicate-do-table
常用命令
mysql> SHOW master status ;
mysql> SHOW slave status ;
mysql> show global status like
'%rpl%';
mysql> show global variables like '%rpl%';