1、原理php
mysql主从配置的流程大致如图:html
1)master会将变更记录到二进制日志里面;mysql
2)master有一个I/O线程将二进制日志发送到slave;linux
3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;sql
4)slave有一个SQL线程,按照relay日志处理slave的数据;数据库
2、操做步骤vim
按照原理,咱们开启mysql主从复制,咱们大致须要作如下操做:服务器
1)开启master的二进制日志测试
2)开启slave的二进制日志spa
3)将slave指向master
4)开始复制
3、开启master二进制日志
1)编辑mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二进制日志配置,开启二进制(master-bin只是日志文件名称,能够本身指定)
log-bin=master-bin
server-id=1
注意:server-id是要指定的,否则会报错,每一台指定一个惟一标识符
4、受权
咱们须要给slave配置一个用户/密码的权限
mysql>GRANT REPLICATION SLAVE ON *.* TO '用户名'@'slave数据库的IP地址' IDENTIFIED BY '密码';
这行命令的意思是:容许在某个IP地址的某个用户以某个密码对当前数据库的全部库和全部表进行复制操做
注意:以上配置了权限,咱们须要刷新如下权限使用命令:
mysql>flush privileges;
或者直接重启mysql服务:
service mysql restart;
5、查看如下master的状态
其实主要是查看如下master的日志文件名字,以及文件所在的位置,使用命令:
show master status;
能够看到相似以下信息:
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 1516 | | | |
+-------------------+----------+--------------+------------------+-------------------+
File: 日志文件名称
Position: 日志所在位置
6、开启slave的二进制日志
进入slave的服务器
1)编辑mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二进制日志配置,开启二进制(relay-bin只是日志文件名称,能够本身指定)
log-bin=relay-bin
server-id=2
注意:server-id是要指定的,否则会报错,每一台指定一个惟一标识符
7、将slave指向master
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服务器的IP',
>MASTER_USER='master受权的帐号',
>MASTER_PASSWORD='master受权的密码',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;
8、开始主从复制
在slave上执行
mysql>start slave;
咱们能够查看slave的运行状态:
show slave status\G;
能够看到相似以下内容:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
注意:
Slave_IO_Running: YES 表示slave的日志读取线程开启
Slave_SQL_Running: YES 表示SQL执行线程开启
若是有主从复制有错误信息其实也能够看到
9、测试
以上咱们就将主从复制功能设置完毕了,咱们能够经过在master里面建立数据库,或者表,插入数据等来测试一下
10、注意点
1)开启了主从复制,slave库若是写入数据的话,可能致使数据回滚从而主从复制线程中断,能够经过如下方式解决:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)若是要中止slave的复制可使用命令:
mysql>stop slave;
3)因为主从复制是基于I/O的日志,因此会存在必定延时,若是对数据一致性要求很是高的话,简单的主从复制在实际环境中会存在问题
参考文章:
1)https://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label0