Centos7下mysql配置主从

虚拟机环境: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、总结

猜你喜欢

转载自www.cnblogs.com/ZhaFive/p/10572251.html