mysql 双主配置(互为主从)

记录一次mysql双主配置,新手配置很多不规范,欢迎大佬指正。

一、准备工作

本地搭建了两台Linux虚拟机,ContOS 7 64位。mysql使用mysql5.7.28,mysql数据库安装可以参考我写另一篇博客https://blog.csdn.net/Lin_Miao_09/article/details/108639713

服务器1ip为:192.168.22.88

服务器2ip为:192.168.22.89

二、配置过程

修改/etc/my.cnf配置文件,按mysql读取配置文件的顺序,优先选择配置该配置文件。

vi /etc/my.cnf

配置文件中备注说明不是很准确,还请谅解。

mysql_1的配置:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#数据库,入盘路径
datadir=/var/lib/mysql
#scok存储文件
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#日志记录文件
log-error=/var/log/mysqld.log
#MySQL pid 文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID。
pid-file=/var/run/mysqld/mysqld.pid

#设置服务id为1,自动增长id为1,步长为2
server-id = 1
auto_increment_offset = 1
auto_increment_increment = 2

#日志格式设置为二进制
log-bin = mysql-bin
#日志模式为ROW(记录每一行数据)
binlog-format=ROW

#表示binlog记录的就只是影响后的行。如此一来使用ROW格式就能节约很多的磁盘空间
#binlog_row_p_w_picpath=minimal
#开启记录修改日志记录,主可以修改从,从可以修改主,形成主主
log-slave-updates=true
#互为从库,启动强一致性,数据库执行日志SQL顺序一致
gtid-mode=on
enforce-gtid-consistency=true
#主信息存储库、中继日志信息存储库 设置为表格式
master-info-repository=TABLE
relay-log-info-repository=TABLE
#每一次执行都行进行同步
sync-master-info=1
#同步线程数设置为0,则采用默认的单线程进行复制
slave-parallel-workers=0
#采用系统默认的刷盘时间,由系统决定将数据存入磁盘
sync_binlog=0
#记录校验
binlog-checksum=CRC32
#不仅dump thread会对event进行校验,当master上执行show binlog events的时候,也会对event进行校验(保证完整性)
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1

#日志记录期限5天
expire_logs_days=5
#最大文件大小
max_binlog_size=1024M
#忽略不同步的数据库
replicate-ignore-db = mysql                                             
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
#最大连接数
max_connections = 3000
#最大错误连接数
max_connect_errors = 30

#忽略应用程序想要设置的其他字符集
skip-character-set-client-handshake
#连接时执行的SQL
init-connect='SET NAMES utf8'
#服务端默认字符集
character-set-server=utf8
#请求的最大连接时间
wait_timeout=1800
#和上一参数同时修改才会生效
interactive_timeout=1800
#sql模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#最大允许数据包
max_allowed_packet = 10M
#大容量缓冲区大小
query_cache_type = 1
#查询缓存限制
query_cache_limit = 4M
#关键的缓存区大小
key_buffer_size = 256M
#读取缓冲区大小
read_buffer_size = 16K

#启动mysqld来禁用DNS主机名查找。然而,在这种情况下,你只可以使用MySQL中的授权表中的IP号
skip-name-resolve
#慢查询
slow_query_log=1
#慢查询时间
long_query_time = 6
#慢查询日志
slow_query_log_file=slow-query.log
#每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;
innodb_flush_log_at_trx_commit = 2
#日志缓冲区大小
innodb_log_buffer_size = 16M

#不使用补全功能
#no-auto-rehash

#关键的缓冲区大小
key_buffer_size = 20M
#排序缓冲区大小
sort_buffer_size = 20M
#读取缓冲区大小
#read_buffer = 2M
#写入缓冲区大小
#write_buffer = 2M

#快速返回
#quick

#最大允许数据包
#max_allowed_packet = 16M

mysql_2的配置:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#数据库,入盘路径
datadir=/var/lib/mysql
#scok存储文件
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#日志记录文件
log-error=/var/log/mysqld.log
#MySQL pid 文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID。
pid-file=/var/run/mysqld/mysqld.pid

#设置服务id为1,自动增长id为1,步长为2
server-id = 2
auto_increment_offset = 2
auto_increment_increment = 2

#日志格式设置为二进制
log-bin = mysql-bin
#日志模式为ROW(记录每一行数据)
binlog-format=ROW

#表示binlog记录的就只是影响后的行。如此一来使用ROW格式就能节约很多的磁盘空间
#binlog_row_p_w_picpath=minimal
#开启记录修改日志记录,主可以修改从,从可以修改主,形成主主
log-slave-updates=true
#互为从库,启动强一致性,数据库执行日志SQL顺序一致
gtid-mode=on
enforce-gtid-consistency=true
#主信息存储库、中继日志信息存储库 设置为表格式
master-info-repository=TABLE
relay-log-info-repository=TABLE
#每一次执行都行进行同步
sync-master-info=1
#同步线程数设置为0,则采用默认的单线程进行复制
slave-parallel-workers=0
#采用系统默认的刷盘时间,由系统决定将数据存入磁盘
sync_binlog=0
#记录校验
binlog-checksum=CRC32
#不仅dump thread会对event进行校验,当master上执行show binlog events的时候,也会对event进行校验(保证完整性)
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1

#日志记录期限5天
expire_logs_days=5
#最大文件大小
max_binlog_size=1024M
#忽略不同步的数据库
replicate-ignore-db = mysql                                             
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
#最大连接数
max_connections = 3000
#最大错误连接数
max_connect_errors = 30

#忽略应用程序想要设置的其他字符集
skip-character-set-client-handshake
#连接时执行的SQL
init-connect='SET NAMES utf8'
#服务端默认字符集
character-set-server=utf8
#请求的最大连接时间
wait_timeout=1800
#和上一参数同时修改才会生效
interactive_timeout=1800
#sql模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#最大允许数据包
max_allowed_packet = 10M
#大容量缓冲区大小
query_cache_type = 1
#查询缓存限制
query_cache_limit = 4M
#关键的缓存区大小
key_buffer_size = 256M
#读取缓冲区大小
read_buffer_size = 16K

#启动mysqld来禁用DNS主机名查找。然而,在这种情况下,你只可以使用MySQL中的授权表中的IP号
skip-name-resolve
#慢查询
slow_query_log=1
#慢查询时间
long_query_time = 6
#慢查询日志
slow_query_log_file=slow-query.log
#每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;
innodb_flush_log_at_trx_commit = 2
#日志缓冲区大小
innodb_log_buffer_size = 16M

#不使用补全功能
#no-auto-rehash

#关键的缓冲区大小
key_buffer_size = 20M
#排序缓冲区大小
sort_buffer_size = 20M
#读取缓冲区大小
#read_buffer = 2M
#写入缓冲区大小
#write_buffer = 2M

#快速返回
#quick

#最大允许数据包
#max_allowed_packet = 16M

配置参数基本一致。

配置完成重启mysql,确保配置生效。

配置同数据的账号及授权:

mysql_1配置

mysql> grant replication slave on *.* to 'repl'@'192.168.22.89' identified by '12345678';
mysql> flush privileges;

mysql_2配置

mysql> grant replication slave on *.* to 'repl'@'192.168.22.88' identified by '12345678';
mysql> flush privileges;

查看数据库状态,由于两个数据库都是新安装的,状态基本一致:

mysql_1:

mysql_2:

配置同步信息:

mysql_1:

mysql> change master to master_host='192.168.22.89',master_port=3306,master_user='repl',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=611;

mysql> start slave;


mysql> show slave status\G;

显示如下则状态正常:

mysql_2:

mysql> change master to master_host='192.168.22.88',master_port=3306,master_user='repl',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=611;

mysql> start slave;


mysql> show slave status\G;

显示如下则状态正常:

到这一步双主数据库基本完成。

 开启MySQL的GTID功能(确保使用事务时,数据的一致性)

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)


mysql> change master to MASTER_AUTO_POSITION=1;


Query OK, 0 rows affected (0.01 sec)


mysql> start slave;


Query OK, 0 rows affected (0.00 sec)

该文章参考了该文章,并结合自己实际操作写的。

https://www.cnblogs.com/jpfss/p/11577924.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值