环境要求
- 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_Running
和Slave_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_Running
和Slave_SQL_Running
字段,两者结果为YES
表明同步成功
评论区