一,
mysql主从复制原理
MySQL数据库本身提供的主从复制功能可以实现数据的多点自动备份,实现数据库的扩展。 多个数据备份不仅可以提高数据的安全性,还可以通过实现读写分离来提高数据库的负载性能。
Mysql主从复制的实现原理图大致如下。
MySQL之间的数据复制基础是二进制日志文件(儒家小蚂蚁日志文件),原理如下:
1 .从库的IO线程向主库的主进程发送请求,主库验证子库,负责向主库的IO线程传输数据
2 .主库IO线程比较库中发送的master.info中的信息,将儒教小蚂蚁log文件信息、偏移量和儒教小蚂蚁log文件名等发送到从库
3 .从库中收到信息后,将儒小蚂蚁的log信息存储在relay-儒小蚂蚁中,同时更新master.info的偏移量和儒小蚂蚁的log文件名
4 .从库中的SQL线程不断读取relay-儒雅蚂蚁的信息,同时将读取的偏移量和文件名写入relay-log.info文件,将儒雅蚂蚁的log信息写入自己的数据库
5 .上次同步完成后,库IO线程不断向主库IO线程请求儒家小蚂蚁log信息
6 .如果要从库中创建主库,还会打开log_儒的小蚂蚁和log-slave-update参数
二、
mysql主从复制类型
1
基于语句的副本
在主服务器上执行的语句将从服务器上再次执行,并且MySQL-3.23版本或更高版本支持。
2
基于行的复制
是从MySQL-5.0发行版开始引入的,它直接复制了主服务器上改编的内容,而不考虑这些内容是由哪个语句引起的。
3
混合复制的类型
缺省情况下,MySQL使用基于语句的复制,如果基于语句的复制导致问题,则使用基于行的复制,MySQL将自动选择。
在MySQL从主复制体系结构中,读取操作可以在所有服务器上执行,而写入操作只能在主服务器上执行。 主从复制体系结构为读取操作提供了扩展,但如果写入操作较多(多个从服务器从主服务器上同步数据),则在单主模型复制过程中,主服务器会成为性能瓶颈。
三、
详细配置MySQL主从复制
1 .配置说明
主服务器:
o
打开二进制日志
o
一般设置唯一的服务器- id---- IP地址的后两位
o
获取主二进制日志的文件名和位置
o
创建用于slave与master通信的用户帐户
从服务器:
o
配置唯一服务器- id
o
使用主文件分配的用户帐户读取主二进制文件日志
o
启用从属服务
2.
具体实现过程为以下:
1、准备工作
(1) .主从数据库版本最好一致
(2)主从数据库中的数据一致
主数据库: 192.168.1.158 /linux6.5
来自数据库: 10.168.1.159 /linux6.5
Mysql版本为5.7
2、修改主数据库主
修改mysql配置my.cnf
主要参数
log-儒家小蚂蚁
服务器-id
不同步哪个数据库
(由于您有许多用户名和密码,因此在典型同步过程中不要同步mysql库。)
儒家小蚂蚁log
_
ignore
_
数据库
=
mysql
儒家小蚂蚁log
_
ignore
_
数据库
=
sys
.
2 .重新启动和创建同步数据的用户
mysqlgrantreplicationslaveon *.* to ' rep ' @ ' 10.168.1.159 ' identified by ' 123456 ';
查询确定,0 rows affected,1warning(0.01sec ) )。
MySQL flush权限;
查询确定,0Rowsaffected(0.01sec ) )。
3 .备份需要同步的数据库
锁定下表:
flush tables with读取锁定; (为了在同步前匹配数据。 )
mysqldump-BDB name1DBA name2- uroot-p/u01/full db.SQL
4 .查看主机状态,记录二进制文件
3 .来自服务器的slave配置
1、修改my.cn
f
2、重新启动和恢复数据库
MySQL-urootp
/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 .启动从属同步过程
在主节点上运行
MySQL未锁定表;
mysqlstart slave;
5、查看从属状态
主要看状态
Slave_IO_Running: Yes
//此状态必须为是
slave _ SQL _ running :是
//此状态必须为是
所有更改是表示主从配置成功,如果MySQL主服务器有更新更改,从服务器将根据特定配置进行相应的同步。
6、从库中设置为只读
MySQL set全局读取_ only=1;
查询确定,0Rowsaffected(0.00sec ) )。
这样就完成了配置。
参考资料:
mysql官方文档