MySQL主从集群
八、MySQL主从集群
原理:
两个日志:主bin-log 从relay-log
三个线程:主dump 从io、sql
作用:
- ·实时备份:主服务器实时备份数据到从服务器,主服务器中数据丢失时,可以从从服务器中恢复数据。
- ·读写分离:主服务器负责写操作(insert\update\delete),从服务器负责读操作(select)
- ·高可用集群:当主服务器突然下线,从服务器可以很快地接替主服务器的功能。
- ·负载均衡:将原本一台服务器处理的请求分发给多台服务器去处理,适用于高并发场景,防止单台服务器负载过高而崩溃。
slave_skip_error = ALL # 跳过报错
步骤:
# 从服务器准备工作
# 配置yum源
mount /dev/cdrom /meida
cd /etc/yum.repos.d
# 关闭防火墙,沙盒
systemctl stop firewalld
systemctl
getenforce 0
set
# mysql 安装
wget 192.168.56.200/Software/mysql_install.sh
# 一键安装
bash mysql_install.sh
# 重新加载
source /etc/profile
bash
# 登录mysql
mysql -uroot -proot123
show databases;
# 开启主服务器的master的log_bin
vim /etc/my.cnf
+++++++++++++++++++++++++++++++++++++
[mysqld]
... # 省略
# 主从复制-主机配置
# 主服务器唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个)
# binlog-do-db=test
# 设置logbin格式
binlog_format=STATEMENT
+++++++++++++++++++++++++++++++++++++
#开启从服务器的realy log
vi /etc/my.cnf
+++++++++++++++++++++++++++++++++++++
[mysqld]
...
# 在之前配置下方编写
# 主从复制-从机配置
# 从服务器唯一ID
server-id=2
# 启用中继日志
relay-log=mysql-relay
+++++++++++++++++++++++++++++++++++++
# 重启两台服务器上的mysql
/etc/init.d/mysqld restart
#关闭主从数据库服务器防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 主数据库创建用户slave并授权
# 在主数据库端(192.168.20.30)
# 登录mysql -uroot -proot123
# 创建用户
create user 'jianwei'@'%' identified with mysql_native_password by 'root123';
# 授权
grant replication slave on *.* to 'jianwei'@'%';
# 刷新权限
flush privileges;
#从数据库端验证主数据库jianwei用户是否可用
# 在从数据库端(192.168.20.30)
# 验证主数据库jianwei用户是否可用
mysql -ujianwei 192.168.20.30 -P3306
### 配置主从节点信息 ###
# 在主数据库端(192.168.20.30)
# 查询服务ID及Master状态
# 登录
mysql -uroot -p
# 查询jianwei_id是否可配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效)
set global server_id = 1;
# 查询Master状态,并记录 File(对应下一步中的master_log_file)
# Position (对应下一步中的master_log_pos)的值
show master status;
# 注意:执行完此步骤后退出主数据库
# 防止再次操作导致 File 和 Position 的值发生变化
### 在从数据库端设置同步 ###
# 在从数据库端(192.168.20.31)
# 登录
mysql -uroot -p
# 查询server_id是否可配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效)
set global server_id = 2;
# 设置主数据库参数(用上一步创建的jianwei用户及密码)
change master to
master_host='192.168.20.30',
master_port=3306,
master_user='jianwei',
master_password='root123',
master_log_file='mysql-bin.000001',
master_log_pos=1864;
# 开始同步
start slave;
# 查询主从复制状态
show slave status\G;
# 查看是否配置成功
# 查看参数 jianwei_IO_Running 和 jianwei_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值
## 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;
#################################################
#!!果连接失败 !! 没有就不用这步
# 在主库执行以下命令查看当前日志信息:
show master status;
# 看信息是多少
日志文件:mysql-bin.000001
日志位置:1864
# 停止
stop slave;
# 彻底清除之前的主库配置信息
reset slave all;
# 重新设置主库连接参数
CHANGE MASTER TO
MASTER_HOST='192.168.20.30',
MASTER_PORT=3306,
MASTER_USER='jianwei',
MASTER_PASSWORD='root123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1864;
# 启动从库复制并检查状态:
START SLAVE;
SHOW SLAVE STATUS\G;
##############################################
## 测试主从复制,主服务上执行 ##
# 在主数据库端(192.168.20.16)
mysql -uroot -p
# 创建test库,t1表,添加测试数据
create database test;
use test;
create table t1(id int,name varchar(30));
insert into t1(id,name) values(1,"aaa");
## 测试主从复制,从服务器上执行 ##
# 在从数据库端(192.168.20.30)
mysql -uroot -p
# 查看是否同步数据
show databases;
use test;
show tables;
select * from t1;