侧边栏壁纸
博主头像
乌拉队长博主等级

你只管努力,其余的交给命运

  • 累计撰写 129 篇文章
  • 累计创建 34 个标签
  • 累计收到 34 条评论

目 录CONTENT

文章目录

MySQL 5.7主主复制配置

乌拉队长
2023-02-02 / 0 评论 / 0 点赞 / 38 阅读 / 1,446 字

环境要求

  • Centos 7 x64
  • MySQL 5.7.24

为方便说明,现作出如下指定:

  • 指定IP为172.31.46.59的服务器作为主机1
  • 指定IP为172.31.37.0的服务器作为主机2

1.安装数据库

  • 安装前置操作
# 解压缩安装包
tar -xvf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar

# 查询MariaDB相关依赖
rpm -qa|grep mariadb

# 卸载MariaDB相关依赖
rpm -qa|grep mariadb
  • 安装必要依赖
yum install libaio perl net-tools
  • 关闭SELNIUX
# 关闭selinux,否则mysql无法启动
setenforce 0
# 查询selinux状态,状态为permissive即可
getenforce
  • 开始安装mysql

安照如下顺序安装rpm包

rpm -ivh mysql-community-common-5.7.24-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.24-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.24-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.24-1.el7.x86_64.rpm

rpm -ivh mysql-community-devel-5.7.24-1.el7.x86_64.rpm

2.配置数据库(两个主机均需要进行如下操作)

  • 创建mysql数据存储目录
# 创建目录
mkdir /mysql

# 授权读写
chmod -R 777 /mysql
  • 修改/etc/my.cnf数据库配置文件
# /etc/.my.cnf文件内容

[mysqld]
#datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server-id=1
datadir  = /mysql
#socket=/mysql/mysql.socket
binlog_format                  = ROW
expire_logs_days               = 7
max_binlog_size                = 1G
log_bin                        = /mysql/mysql-bin
log_bin_index                  = /mysql/mysql-bin.index
innodb_buffer_pool_size = 1G
max_connections = 50

sort_buffer_size=3M
read_buffer_size=8M
join_buffer_size=4M
  • 启动数据库
service mysqld start
# 或者
systemctl start mysqld

# 查看数据库运行状态,状态为active即可
service mysqld status
  • 修改root临时密码
# 从log日志文件中查找临时密码
grep password /var/log/mysqld.log

# 使用临时密码登录数据库
mysql -u root -p 临时密码

# 修改root密码
ALTER USER 'root'@'localhost' identified with mysql_native_password by '123456';

3.配置主主复制数据库

  • 主库配置(主机1)

修改/etc/my.cnf配置文件添加如下配置

# 主库配置
server-id=1
auto-increment-increment = 2
auto-increment-offset = 1

# 需要同步的数据库,如果需要同步多个database,则配置多个replicate-do-db
# 如果需要同步全部数据库,则不写该字段
replicate-do-db = test
# 配置需要忽略的数据库,即不需要同步的database
# 如果需要忽略多个database,则配置多个binlog-ignore-db
binlog-ignore-db  = mysql
binlog-ignore-db  = information_schema

slave-skip-errors=all
log-slave-updates
skip-name-resolve
  • 搭建主从复制关系(主机1)

使用root登录mysql,并执行如下操作

# 使用root创建新用户repl,该用户用来负责主从一致
CREATE USER 'repl'@'%' IDENTIFIED with mysql_native_password BY '123456';

# 授予权限,该用户下所有库所有表,所有ip均可访问
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'%';

# 检查是否授予成功
select user,host from mysql.user\G;

# 查看主数据库状态
show master status;
  • 从库配置(主机2)

修改/etc/my.cnf配置文件添加如下配置

# 从库/etc/my.cnf配置
server-id=2     # 这个不能和主库的server-id相同

auto-increment-increment = 2
auto-increment-offset = 1

binlog-ignore-db  = mysql
binlog-ignore-db  = information_schema

slave-skip-errors=all
log-slave-updates
skip-name-resolve

备注:

  • 主机1和主机2都只有server-id不同和auto-increment-offset不同
  • auto-increment-offset是用来设定数据库中自动增长的起点的,因为这两台
  • 服务器都设定了一次自动增长值为2,所以它们的起点必须得不同,这样才能避
    免两台服务器数据同步时出现主键冲突
  • replicate-do-db指定同步的数据库
  • binlog-ignore-db指定需要忽略的数据库
  • auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2

4.配置数据同步

  • 登录主机1的数据库,并设置从库同步

(此时,主机1为从库,主机2位主库,主主复制的原理就是每台服务器,既充当master节点,又充当slave节点;以主机1为例,当其提供数据时,则主机1为master节点,当主机1需要从另一台master节点同步数据时,则主机1为slave节点)

# 参数说明
# master_host 为 主库服务器ip
# master_port 为 主库 对外端口
# master_log_file和master_log_pos 为 show master status 命令中的结果
CHANGE master to master_host='172.31.37.0',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=1011;
  • 开启从库同步

进入数据库并执行:

# 开启从库同步
start slave;

# 查看同步状态
show slave status\G;

查看show slave status\G;命令的执行结果中的Slave_IO_RunningSlave_SQL_Running字段,两者结果为YES表明同步成功


  • 登录主机2的数据库,并设置从库同步

(此时,主机2为从库,主机1为主库)

# 参数说明
# master_host 为 主库服务器ip
# master_port 为 主库 对外端口
# master_log_file和master_log_pos 为 show master status 命令中的结果
CHANGE master to master_host='172.31.46.59',master_port=3306,master_user='repl',master_password='rEpl@4SlaVe',master_log_file='mysql-bin.000003',master_log_pos=1011;
  • 开启从库同步

进入数据库并执行:

# 开启从库同步
start slave;

# 查看同步状态
show slave status\G;

查看show slave status\G;命令的执行结果中的Slave_IO_RunningSlave_SQL_Running字段,两者结果为YES表明同步成功

0

评论区