Mysql主从复制的基本原理
核心:Slave从Master读取binlog进行数据同步
Mysql主从复制过程:
- Master将二进制日志事件写入到binary log日志
- Slave将二进制日志事件写入到它的relay log中
- Slave重新执行relay log中的日志事件,将改变应用到数据库
复制的基本原则
- 每个Slave只有一个Master
- 每个Slave只能有一个服务器Id
- 每个Master可以有多个Slave
环境准备
准备两台服务器
192.168.10.241(主)、192.168.10.242(从)
安装mysql
# 查看是否已经安装mysql
rpm -qa|grep -i mysql
# 查找到mysql的文件
find / -name mysql
# 删除存在的mysql文件
rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql /usr/share/mysql
# 下载mysql的RPM安装包
cd /opt
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.31-1.el7.x86_64.rpm
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.31-1.el7.x86_64.rpm
# 使用rpm命令安装
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm --force --nodeps
下载mysql
image.png
配置时间同步
# 查看时间
date
# 安装网络时钟
yum install -y ntp
# 设置定时任务
crontab -e
# 输入
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;
登陆mysql
# 登陆
mysql -u root -p
# 此时没有密码会报错,编辑my.cnf文件,实现免密登陆
vi /etc/my.cnf
# 在[mysqld]下添加
skip-grant-tables
# 重启mysql
service mysqld restart
# 重新登陆mysql
mysql -u root -p
# 刷新系统权限表
flush privileges;
# 设置密码
alter user 'root'@'localhost' identified by 'root';
# 刷新系统权限表
flush privileges;
# 配置远程链接
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
# 刷新系统权限表
flush privileges;
# 退出mysql
exit
主从复制
配置主服务器
vi /etc/my.cnf
# 添加以下内容
log_bin=master_bin
# 日志文件的格式
binlog-format=ROW
# 配置服务器的id(一定要是唯一的)
server_id=1
# 对应需要实现主从复制的数据库(具体的数据库名称)
binlog_do_db=test
# 设置不要复制的数据库
binlog-ignore-db=mysql
# 添加完上述配置后,需要进入到数据库为从库添加授权
grant replication slave on *.* to 'root'@'192.168.10.%' identified by 'root';
# 在这里可能出现1819错误,可能是数据库密码长度导致的
# 查看要求的密码长度
select @@validate_password_length;
# 修改密码长度
set global validate_password_length=4;
set global validate_password_policy=0;
# set global validate_password_mixed_case_count=0;
# set global validate_password_number_count=0;
# 具体可查看 SHOW VARIABLES LIKE 'validate_password%';
# 刷新系统权限表
flush privileges;
配置从服务器
vi /etc/my.cnf
# 添加以下内容
log_bin=master_bin
# 日志文件的格式
binlog-format=ROW
# 配置服务器的id(一定要是唯一的)
server_id=2
# 如果要配置双机热备的话
# log-slave-updates=true
验证主从复制
# 重启主服务器和从服务器
service mysqld restart
# 登陆主服务器,查看主服务器的状态
show master status;
image.png
File:生成的日志文件名
Position:偏移量
Binlog_Do_DB:需实现主从复制的数据库
# 登陆从服务器,执行(指定了主服务器的相关信息,log文件和偏移量,方便文件传输和复制)
change master to master_host='192.168.10.241',master_user='root',master_password='root',master_log_file='master_bin.000001',master_log_pos=600;
# 启动slave的数据同步
start slave;
# 关闭slave的数据同步
stop slave;
# 查看slave的配置信息
show slave status\G;
# 重置slave配置信息
rest slave;
# 重新配置主从
reset master;
image.png
发现slave端一直处在connecting状态
可能原因:1.端口未开放 2.远程连接未授权
解决办法:开放端口并配置远程连接即可
网友评论