# 1.MySql的主从复制
MySql的主从复制是将数据从数据库服务器的主节点复制到一个或者多个节点服务器中,可以理解为将数据复制一份保存在从属服务器中;采用异步复制方式。
# 2.主从复制的目的
1> 从服务器做数据热备份,主服务器故障后,切换从数据库保障数据库正常;
2> 降低单磁盘的 I/O 访问频率,提高性能;
3> 读写分离:在需要sql需要锁表的情况下,主数据库负责写,从数据库负责读;
# 3.主从复制的原理
1> master服务器中的binlog二进制文件记录了所有sql执行;
2> slave 服务器对master服务器的二进制进行判读,请求一个 I/O 二进制事件;
3> 服务器为每个 I/O 线程启动一个dump线程,发送二进制事件并保存在从节点本地的中继日志中,从节点启动sql线程读取中继日志的二进制日志文件,执行其中操作,以此保持与主节点服务器的数据一致;
主从复制原理
说明:
1> 从库产生2个线程,I/O thread 和 SQL thread;
2> Master的操作记录在 Binary Log中;Slave的 I/O 线程来读取 Binary Log,并将二进制文件写到 Relay Log中;同时 SQL thread 线程读取 Relay Log中的日志,解析为sql逐一执行,实现主从复制的数据一致性;
# 4.主从复制操作
1> 准备工作
/* 配置两台服务器,或用虚拟机 */
Linux1:CentOS 6.8 MySql5.7 IP:192.168.2.128
Linux2:CentOS 6.8 MySql5.7 IP:192.168.2.129
2> 修改主服务器中数据库mysql的配置文件,使其支持二进制日志
/* 修改Master服务器中MySql配置文件 */
vi /etc/my.cnf
/* 将MySql二进制日志命名为 mysql-bin */
log-bin=mysql-bin
/* 设置二进制格式为 mixed */
binlog_format=mixed // 二进制日志的格式有三种:statement、row、mixed
/* 为服务器设置独一无二的id以便区分,一般使用IP地址的最后位 */
server-id = 128
/* wq保存后退出,重启MySql服务 */
service mysqld restart
3> 修改从服务器中数据库mysql的配置文件,使其支持二进制日志
/* 与master主服务器配置步骤一致,在server-id 设置为从服务的id */
server-id =129
4> 主服务器(Master)上为 从服务器(Slave)分配一个账号,从服务器(Slave)凭此与主服务器(Master)链接
/* 进入master主服务器,连接数据库 */
mysql -u root -p
/* 为slave从服务器赋权 */
GRANT replication slave ON *.* TO ' slave '@'%' IDENTIFIED BY'password';
说明:
GRANT replication slave:分配复制的权限给slave
*.*:可以操作的数据库
'%':所有电脑可以登录
'slave':用户名
' password ':用户密码
5> 查看主服务器(Master)的Bin日志信息
/* 查看master主服务器bin日志信息 */
show master status;
6> 进入slave从服务器,设置
/* 连接slave从服务器数据库 */
mysql -u root -p ;
/* 设置连接目标服务器信息 */
CHANGE MASTER TO
MASTER_HOST='192.168.2.128' ,
MASTER_USER='******',
MASTER_PASSWORD='******',
MASTER_LOG_FILE='mysql-bin000060',
MASTER_LOG_POS=248 ;
说明:
MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即第3步得到的信息
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即第3步得到的信息,(这里注意,最后一项不需要加引号。否则配置失败)
7> 启动slave服务器数据库
/* 启动slave从服务器数据库 */
start slave;
/* 查看配置状态 */
show slave status;