一、 mysql主从复制原理
MySQL数据库自身提供的主从复制功能可以实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
Mysql主从复制的实现原理图大致如下:
MySQL之间数据复制的基础是二进制日志文件(binary log file),原理如下:
1.从库的IO线程向主库的主进程发送请求,主库验证从库,交给主库IO线程负责数据传输;
2.主库IO线程对比从库发送过来的master.info里的信息,将binlog文件信息,偏移量和binlog文件名等发送给从库
3.从库接收到信息后,将binlog信息保存到relay-bin中,同时更新master.info的偏移量和binlog文件名
4.从库的SQL线程不断的读取relay-bin的信息,同时将读到的偏移量和文件名写道relay-log.info文件,binlog信息写进自己的数据库,一次同步操作完成。
5.完成上次同步后,从库IO线程不断的向主库IO线程要binlog信息
6.从库如果也要做主库,也要打开log_bin 和log-slave-update参数
二、 mysql主从复制类型
1 基于语句的复制
主服务器上面执行的语句在从服务器上面再执行一遍,在MySQL-3.23版本以后支持。
2 基于行复制
把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在MySQL-5.0版本以后引入。
3 混合复制类型
MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。
在MySQL主从复制架构中,读操作可以在所有的服务器上面进行,而写操作只能在主服务器上面进行。主从复制架构虽然给读操作提供了扩展,可如果写操作也比较多的话(多台从服务器还要从主服务器上面同步数据),单主模型的复制中主服务器势必会成为性能瓶颈。
三、 MySQL主从复制详细配置
1.配置说明
· 主服务器:
o 开启二进制日志
o 配置唯一的server-id ---一般设置IP地址后两位
o 获得master二进制日志文件名及位置
o 创建一个用于slave和master通信的用户账号
· 从服务器:
o 配置唯一的server-id
o 使用master分配的用户账号读取master二进制日志
o 启用slave服务
2. 具体实现过程如下:
1、准备工作
(1).主从数据库版本最好一致
(2).主从数据库内数据保持一致
主数据库:192.168.1.158 /linux6.5
从数据库:10.168.1.159 /linux6.5
Mysql 版本为5.7
2、主数据库master修改 1.修改mysql配置my.cnf
主要参数
log-bin
server-id
不同步哪些数据库
(一般同步不要同步mysql库,因为有很多用户名和密码)
binlog - ignore - db = mysql
binlog - ignore - db = sys
…….
2.重启并创建同步数据的用户
mysql> grant replication slave on *.* to 'rep'@'10.168.1.159' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
3.备份需要同步的数据库
锁定一下表:
flush tables with read lock;(为了同步前数据一致。)
mysqldump -B dbname1 dbaname2 -uroot -p > /u01/fulldb.sql
4.查看master状态,记录二进制文件
3.从服务器slave配置 1、修改my.cn f
2、重启并恢复数据库
mysql -uroot –p < /u01/fulldb.sql
3、执行同步sql语句
change master to
master_host='192.168.1.158',
master_port=3307,
master_user='rep',
master_password='123456',
master_log_pos=592;
4、启动slave同步进程
在master上执行
mysql>unlock tables;
mysql>start slave;
5、查看slave状态
状态主要看
Slave_IO_Running: Yes
//此状态必须YES
Slave_SQL_Running: Yes
//此状态必须YES
全变YES说明主从配置成功,当MySQL主服务器有更新变化时,从服务器会根据具体配置做相应的同步。
6、设置从库只读
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)
至此配置完成。
参考资料:
mysql 官方文档
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10201716/viewspace-2637828/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10201716/viewspace-2637828/