一、主从复制原理
主对外工作,从对内备份。
1.关闭主从机器的防火墙
systemctl stop iptables(需要安装iptables服务)
systemctl stop firewalld(默认)
systemctl disable firewalld.service(设置开启不启动)
2.主服务器配置
2.1修改my.cnf文件
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=133
#指定复制的数据库(可选)
binlog-do-db=kkb2
binlog-ignore-db=kkb
#指定不复制的数据库(可选,,mysql5.7)
replicate-ignore-db=kkb
#指定忽略的表(可选,mysql5.7)
replicate-ignore-table = db.table1
2.2:重启mysql服务
systemctl restart mysqld
2.3主机给从机授备份权限
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by 'root';
2.4 刷新权限
FLUSH PRIVILEGES;
2.5查询master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+---------------
----+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |
+------------------+----------+--------------+------------------+---------------
----+
| mysql-bin.000009 | 871 | | kkb_2 |
|
+------------------+----------+--------------+------------------+---------------
----+
1 row in set (0.00 sec)
3.从服务器配置
3.1修改my.cnf文件
[mysqld]
server-id=135
3.2重启并登录到MySQL进行配置从服务器
查看节点状态show slave status \G;,如果是开启就先关闭stop slave;
change master to同步初始化 master_log_file 、 master_log_pos 以主机状态为主 show master status;
change master to
master_host='192.168.85.129',
master_port=3306,
master_user='root',
master_password='root',
master_log_file='mysql-bin.000009',
master_log_pos=871
3.4启动从服务器复制功能
start slave;
3.5检查从服务器复制功能状态
mysql> show slave status \G;
……………………(省略部分)
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
4.主从延时
4.1因为SQLThread和IOThread是默认单线程,当主机的tps(每秒事务处理数)高于从机的Thread所能承受范围,则会出现从机复制延时; 解决方案: 将thread改成多线程模式 MySQL5.6改表,MySQL5.7改GTID;
4.2、网络延时 解决方案:
主和从要布置在同一个网段内;
4.3、IO延时
slave server硬件升级
4.5判断延时
-
通过show slave status查看从机中Seconds_Behind_Master=0则不延时
- 建表加时间戳(timestamp),看时间差
注:利用分库分表中间件 Mycat、 sharding JDBC强制读取主库解决主从问题