一、主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;
这时,再次查看从节点的状态,就恢复正常了
在主节点中添加数据进行验证
从节点正常复制同步数据