搭建mysql数据库主从复制,主机只能有一个,从机可以有多个。
主从复制原理:
从从数据库接入主机那一刻开始(以前的数据不会同步到从机),从机开始读取主机写的日志BinaryLog,写入到自己的中继日志RelayLog,然后从机读取RelayLog进行写入数据。
主从复制缺点:
从数据同步主数据延迟问题,解决参考方案:https://blog.csdn.net/hao_yunfeng/article/details/82392261
另外一个mysql重要参数设置,MySQL中innodb_flush_log_at_trx_commit的设置(要数据安全还是更高的并发性能):https://www.cnblogs.com/jpfss/p/10772952.html
开始搭建
1.主机配置
修改配置文件: vim /etc/my.cnf
就写在[mysqld]下面就行
新增一行 server-id=1 #主服务唯一ID
新增一行 log-bin=mysql-bin #启用二进制日志
新增一行 binlog-do-db=testdb #需要复制的主数据库,可新增多行配置多个
新增一行 binlog-ignore-db=mysql #不要复制的数据库,比如自带的,可新增多行配置多个,其实也不用配置,配置了binlog-do-db就行
新增一行 binlog-format=MIXED #日志格式
新增好之后保存就好了。
binlog-format有三种格式,各有缺点:
STATEMENT:
日志格式会造成数据不一致,比如:update xxx set time=now() where name='111',从数据库再执行这个语句,就因为函数now()导致主从时间数据不一致
ROW:
会记录每一行的真实改变,不会造成数据不一致的问题。但也有缺点,比如:update xxx set time=now(),进行全表更新,如果这张表有10万条数据,就会有10万条日志,从数据库就会要执行10万次。10万条的写入日志,10万条的从数据库更新,造成性能低下。
MAXED:
mysql会帮你自动选择使用STATEMENT还是ROW,如果没有函数造成数据不一致,则执行STATEMENT,否则执行ROW。缺点:识别不了系统变量,如@@host name。
2.从机配置
修改配置文件:vim /etc/my.cnf
就写在[mysqld]下面就行
新增一行 server-id=2 #从服务唯一ID
新增一行 relay-log=mysql-relay
新增好之后保存就好了。
3.配置好之后,重启主从mysql服务
4.主机从机都关闭防火墙,云服务器可不需要,开启端口,只要主从能互通就行
5.在主机上建立账号并授权slave,在主机mysql服务上执行授权命令:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '密码';
6.查询master的状态:show master status;
File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
mysql-bin.000001 | 462 | testdb | mysql |
|
File:binlog日志
Position:接入点,从这往后的数据
备注:此时主机不要进行操作了,不然接入点会变,影响后面从机配置的接入点
7.在从机上配置连接主机,执行复制主机的命令:
CHANGE MASTER TO MASTER_HOST='主机ip',
MASTER_USER='slave',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.具体数字', #上面表格的File
MASTER_LoG_POS=具体值; #上面的Postion,接入点
备注:这是一条语句,使用,隔开的
8.启动从机服务:start slave;
备注:如果从机以前有连接过主从,报错run stop SLAVE...first,那么重置一下从机即可,命令:
stop slave;
reset master;
9.查看从机服务状态:show slave status\G; #\G按列格式输出
成功标志:
Slave_IO_Running:YES
Slave_SQL_Running:YES
如果只有一个YES或者没有YES,输出列会有日志
10.如果成功,主机开始创建数据库testdb,在这个数据库中进行创建表,插入数据,然后到从机查看校验是否有数据。
11.如何停止从服务复制功能:stop slave;
12.如何重新配置主从:stop slave; reset master;
学习mycat实战应用笔记:https://b23.tv/V3zlAs