mysql主从复制及故障修复

发布于:2024-10-17 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、主MySQL数据库的配置

        分别在三台主机(chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据,其中chen2/10.110作为主MySQL服务器,其余两台作为从MySQL服务器。

1、在主机上部署mysql数据库

        详细的请看上一篇:mysql数据库的备份与恢复-CSDN博客

其上含,部署mysql数据库脚本,可以一键部署对应版本的MySQL数据库。

2、修改相应的配置

        在主mysql服务器的配置中进行修改,开启主服务器的二进制日志功能,设置其 server_id 为本机IP地址,防止与其他主机冲突,关闭其域名解析的功能。

vim /etc/my.cnf.d/mysql-server.cnf

[mysqld]
server-id=1
skip_name_resolve=1
log-bin
socket=/data/mysql/mysql.sock
datadir=/data/mysql
log-error=/data/mysql/mysql.log
pid-file=/tmp/mysql.sock

3、主mysql数据库中创建账号和密码

        mysql数据库的主从复制,是基于账号和密码来进行的,在主服务器中创建有复制权限的账号

create user 'repluser'@'%';
alter user 'repluser'@'%' identified with mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%';

这里是使用的老式的方法来设置密码,用来兼容不同版本的从服务器

进行检测是否吵架呢成功

select user,host,authentication_string from mysql.user;

查看主服务器的二进制日志是否开启

show master status;

二、从MySQL数据库的配置

1、修改从mysql数据库的配置文件

        开启二进制日志功能,设置其服务器id ,跳过域名解析,权限设置为仅读

vim /etc/my.cnf

[mysqld]
server-id=2
skip_name_resolve=1
log-bin
socket=/data/mysql/mysql.sock
datadir=/data/mysql
log-error=/data/mysql/mysql.log
pid-file=/tmp/mysql.sock
read_only

2、主从相连

在从节点上使用有复制权限的用户连接至主服务器,并启动复制线程

修改完配置文件记得重启服务

service mysqld restart

登录从MySQL控制台,进行修改

change master to
    -> master_host='192.168.10.110',
    -> master_user='repluser',
    -> master_password='123456',
    -> master_port=3306,
    -> master_log_file='chen2-bin.000002',
    -> master_log_pos=157;

在上面设置的,主服务器的IP地址、连接用户、用户的密码、主服务器的端口、二进制日志的位置节点、从哪个位点开始

3、开启从节点线程

先检测一下从节点的线程状态信息

SHOW REPLICA STATUS\G

其状态信息,与上面设置的保持一致

开启从节点的主从同步线程:

START REPLICA;

检测从节点的线程状态信息

SHOW REPLICA STATUS\G

查看主从节点开启的线程

show processlist;

从服务器

主服务器

4、检验数据是否正常同步

先查看之前主服务器中创建用户 repluser的权限,确保其具备相应的权限

select user,host,authentication_string from mysql.user;

在主服务器中创建数据库test

从服务器中进行查看数据是否同步

在主数据库test中吵架呢表tab1

create table tab1 (id int primary key,name char(24));

从服务器中查看

表中添加数据

insert into tab1 values (1,'aaa'),(2,'bbb'),(3,'ccc');

5、新建从MySQL服务器,使其关联主MySQL数据库

先在原主数据库中备份数据,这里直接使用脚本进行数据的备份

数据备份详情请看:mysql数据库的备份与恢复-CSDN博客

#!/bin/bash
# 这是一个实战分库的备份脚本
# 
TIME=`date +%F_%H-%M-%S`
DIR=/backup
PASS='123456'

[ -d $DIR ] || mkdir $DIR

for DB in `mysql -u root -p"$PASS" -e 'show databases' | grep -Ev "^Database|.*schema$|sys"`;do
    mysqldump -F --single-transaction --source-data=2 --default-character-set=utf8mb4 -q -B $DB -p"$PASS" | gzip > ${DIR}/${DB}_${TIME}.sql.gz
done

修改对应的密码,就可以直接对,所需要的数据进行备份

将备份数据在新的从服务器上解压,并在其中添加 change master to

查看主服务器的二进制位点,在新增的从服务器上添加对应的配置

启动I/O线程,并进行验证

START REPLICA;

在主节点上,插入数据验证

insert into tab1 values (4,'ddd');

从节点上查看

新增从节点,可以正常的从主节点中,同步数据。

三、主从配置,故障修复

1、测试阻塞从节点

        从之前的配置可以知道,从节点上,设置的仅读,禁止写入。

        这么配置是为了预防,当从节点中添加数据后,其与主节点之间容易造成冲突,形成阻塞状态

在从节点上添加数据

当主节点上也出现数据更新时

其他从节点上数据同步情况

这时,新添加的节点上就会出现阻塞现象

2、对阻塞的节点进行恢复

先关闭 replica 线程

stop replica;

将错误数据删除,并将正确数据手动添加进去

将从节点忽略一个主节点的复制事件,并再次启动replica线程

set global sql_replica_skip_counter=1;

这时,再次查看从节点的状态,就恢复正常了

在主节点中添加数据进行验证

从节点正常复制同步数据