虚拟机环境:CentOS 7.1810(64-bit system)
数据库版本:MySQL 5.6.24
1、数据库安装
参考:https://www.cnblogs.com/adjk/p/6660453.html
下载 MySQL Yum Repository
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
如果提示 wget: 未找到命令,请先执行 yum install wget 安装 wget
yum install wget
添加 MySQL Yum Repository
添加 MySQL Yum Repository 到你的系统 repository 列表中
yum localinstall mysql-community-release-el7-5.noarch.rpm
2、主库设置
https://www.jb51.net/article/27222.htm
https://www.cnblogs.com/wajika/p/6710458.html
https://www.cnblogs.com/martinzhang/p/3454358.html
http://www.cnblogs.com/linguoguo/p/4387605.html
https://blog.csdn.net/qq_22227087/article/details/80946894
http://blog.sina.com.cn/s/blog_72e339cd0100xphg.html
https://blog.csdn.net/z69183787/article/details/70183284
https://www.cnblogs.com/zgx/archive/2011/09/13/2174823.html
https://www.cnblogs.com/tianshupei88/p/5075367.html
https://www.cnblogs.com/goodhacker/p/3373213.html
1.在主数据库服务器为从服务器添加一个拥有权限访问主库的用户
GRANT REPLICATION SLAVE ON *.* TO ' test'@'%' IDENTIFIED BY 'test';
(%表示允许所有IP,可设置指定从服务器IP)
添加用户后:
可在从服务器上用mysql -h127.0.0.1 -utest -ptest; 来测试是否有权限访问主数据库
2.在主据库配置文件加上
#master config server-id = 1 log-bin = mysql-bin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
参数说明:
server-id:
master_id必须为1到232–1之间的一个正整数值。并且,从服务器的ID必须与主服务器的ID不相同
1、 mysql的同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有的
2、 每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,前一个将被踢掉。 这里至少有这么一种考虑:
slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题;
3、 在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候有要保证一条数据不会陷入死循环,这里就是靠server-id来实现的
binlog:
MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。
一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景:
其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
其二:自然就是数据恢复了,通过使用mysqlbinlog工具来使恢复数据。
二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
innodb_flush_log_at_trx_commit:
0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
当设置为0,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
当设置为1,该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。。
当设置为2,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。
查找资料时候看到其他文章说innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数,当两个参数都设置为1的时候写入性能最差,推荐做法是innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000
一般MySQL数据库的配置文件位置在 /etc/my.cnf
不在这个目录下,用find命令找一下
find / -name my.cnf
修改好配置文件后,重启mysql服务
进入mysql,查看主服务器状态
show master status;
File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
mysql-bin.000006 | 120 |
出现这块内容,主服务器即配置完成
3、从库设置
https://www.cnblogs.com/kylinlin/p/5258719.html https://www.cnblogs.com/zjoch/p/5573106.html
server-id = 2 replicate-do-db = test
重启mysql服务后,登入mysql配置以下信息
mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.253.143', -> MASTER_PORT=3306, -> MASTER_USER='replication_user_name', -> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='主数据库File:mysql-bin.000006', -> MASTER_LOG_POS=主数据库Position:120;
如果你的一切配置顺利
你在从服务器上输入命令:show slave status\G
正常情况:Slave_IO_Running:yes
Slave_SQL_Running:yes
4、测试
在主库进行相应操作,在从库查看数据是否更新成功
5、总结