概述
Mysql主从复制配置为实现数据库读写分离的基础,主库只写,从库只读,读写写分离可提升系统的吞吐量和稳定性,本文主要介绍一主一从的部署方案,一主多从、多主一从、多主多从的配置可依此类推
环境说明
IP | 服务 | 操作系统 | 备注 |
---|---|---|---|
192.168.1.101 | Mysql8.0.27 | Centos7.9 | 主库 |
192.168.1.102 | Mysql8.0.27 | Centos7.9 | 从库 |
# 依次安装基础组件
yum -y install openssl.x86_64
yum -y install openssl-devel.x86_64
yum -y install perl.x86_64
yum -y install perl-devel.x86_64
yum -y install net-tools
离线安装
主从服务器上安装的步骤一致
Mysql下载
# 定位到指定目录
cd /data/soft
# 下载安装包(下载慢)
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar
# 查看是否安装 mariadb
rpm -qa|grep mariadb
# 删除mariadb,如有则删除,避免不必要的安装问题
# Mariadb也是Mysql之父创建的,为Mysql的一个分支,也是开源的
rpm -e --nodeps mariadb-libs
解压安装
cd /data/soft
tar -xvf mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar
# 解压缩之后,得到以下rpm包
mysql-community-client-8.0.27-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.27-1.el7.x86_64.rpm
mysql-community-common-8.0.27-1.el7.x86_64.rpm
mysql-community-devel-8.0.27-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.27-1.el7.x86_64.rpm
mysql-community-libs-8.0.27-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.27-1.el7.x86_64.rpm
mysql-community-server-8.0.27-1.el7.x86_64.rpm
mysql-community-test-8.0.27-1.el7.x86_64.rpm
# “依次”安装以下rmp文件,如对应的包安装提示缺少基础组件,对应安装上再执行下一步!!!
# “依次”安装以下rmp文件,如对应的包安装提示缺少基础组件,对应安装上再执行下一步!!!
# “依次”安装以下rmp文件,如对应的包安装提示缺少基础组件,对应安装上再执行下一步!!!
rpm -ivh mysql-community-common-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-compat-8.0.27-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.27-1.el7.x86_64.rpm
mysql-community-test-8.0.27-1.el7.x86_64.rpm #可以不安装!!!
# 执行命令,查看是否安装成功
rpm -qa|grep mysql
Mysql配置
# 创建数据存储文件目录
mkdir -p /data/mysql/{data,bin}
# 文件夹授权
chown -R mysql:mysql /data/mysql
# 修改配置文件
vi /etc/my.cnf
# 修改/新增配置如下
[mysqld]
# 配置数据保存位置
datadir=/data/mysql/data
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 忽略大小写
lower_case_table_names=1
# 允许最大连接数
max_connections=999
#缓存池
innodb_buffer_pool_size=4G
# 脏页占innodb_buffer_pool_size的比例时,触发刷脏页到磁盘
# 25%~50%
innodb_max_dirty_pages_pct=30
# 后台进程最大IO性能指标
# 默认200,如果SSD,调整为5000~20000
innodb_io_capacity=200
#修改默认密码加密方式
default_authentication_plugin=mysql_native_password
启动服务
# 初始化服务
sudo -u mysql mysqld --initialize --console
# 启动服务并设置开机自启
systemctl start mysqld ; systemctl enable mysqld
# 开放端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
如服务启动不成功,尝试执行
setenforce 0
若可以再关闭selinux,操作:修改/etc/selinux/config
文件中设置SELINUX=disabled
,然后重启或等待下次重启
用户密码
# 查看临时密码
cat /var/log/mysqld.log |grep root
# 连接数据,输入临时密码
mysql -u root –p
# 修改临时密码,为Nimda123~
alter USER 'root'@'localhost' IDENTIFIED BY 'Nimda123~';
# 刷新权限
FLUSH PRIVILEGES;
主从配置
各个Mysql配置中的server_id
须不相同
主库 192.168.1.101
- 追加my.cnf配置
# 追加my.cnf配置
vi /etc/my.cnf
# 内容如下
# 配置binlog保存位置,/data/mysql/bin文件夹在离线部署时已创建
log-bin=/data/mysql/bin/mysql-bin
binlog-format=ROW
# MYSQL实例id, 不能重复
server_id=1
# 修改默认密码加密方式
default_authentication_plugin=mysql_native_password
- 重启Mysql
systemctl restart mysqld
- 创建专用与同步的账户
# 打开mysql会话
mysql -u root -p #然后输入秘密
# 创建用于同步的backup账号
CREATE USER 'backup'@'192.168.1.102' IDENTIFIED BY 'Nimda123~';
# 分配权限,指定用户IP
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.1.102';
# 刷新权限
FLUSH PRIVILEGES;
# 修改密码加密方式
# root账户
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Nimda123~';
# backup账户
ALTER USER 'backup'@'192.168.1.102' IDENTIFIED WITH mysql_native_password BY 'Nimda123~';
- 查看binlog文件和位置
show master status;
# 记录bin-log二进制文件,如 mysql-bin.000001
# 记录Position,如156
# 这两个记录是要告诉从库从哪个文件哪个位置开始记录
从库 192.168.1.102
- 追加my.cnf配置
# 追加my.cnf配置
vi /etc/my.cnf
# 内容如下
binlog-format=ROW
# MYSQL实例id, 不能重复
server_id=2
# 设置不同步数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
#修改默认密码加密方式
default_authentication_plugin=mysql_native_password
- 重启Mysql
systemctl restart mysqld
- 开启同步
# 打开mysql会话
mysql -u root -p #然后输入秘密
# 执行同步SQL语句,MASTER_LOG_FILE和MASTER_LOG_POS分别对应着主库的第五步操作
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='Nimda123~',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=156,MASTER_CONNECT_RETRY=30;
# 启动slave同步进程
start slave;
# 查看slave状态
show slave status\G;
# Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功
- 验证
在主库中创建一个数据可,查看从库中是否会出现,如果出现则表示配置成功