Centos7 从零开始搭建MySQL主从复制 (避免踩坑)

本文是作者在其他人的一些资料上,结合自己亲身搭建时“采坑”所总结出的经验。

首先,本文的主要内容来源自MySQL主从复制配置演示MySQL主从复制配置步骤等。

文章大部分内容与上面一篇文章和一部视频的内容相同,但在一些方面由于系统不同等原因有作者本人的实践。

在这里插入图片描述
软件:VMware Workstation 15 Player
操作系统:Centos7
版本:Percona-Server-5.6(MySQL分支版本)
模式:一主两从

  1. 搭建Centos7系统
  2. 下载Percona-Server-5.6
  3. 搭建
    一主两从,master 192.168.133.138; slave1 192.168.133.139; slave2 192.168.133.140
  4. MySQL安装包上传:
rz
# 此时Mysql的安装包在master的 ~ 目录下,使用mv 命令将其移动到/usr/local/src 目录
mv Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar /usr/local/src

# 将master的mysql安装包复制到两台从服务器上
scp Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar root@192.168.133.139:/usr/local/src/
scp Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar root@192.168.133.140:/usr/local/src/
  1. mysql安装
# 分别在master, slave1, slave2下执行下列语句
tar xvf Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar
rpm -ivh Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar
rpm -ivh Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar
rpm -ivh Percona-Server-5.6.49-89.0-rd043d30-el7-x86_64-bundle.tar

注意: 作者本人在执行最后一条时,遇见了错误error: Failed dependencies: mariadb-libs is obsoleted by MySQL-shared-compat-5.6.46-1.el7.x86_64, 这个问题是因为Centos原本有mysql的mariadb安装包,删除其即可:

yum -y remove mariadb-libs

执行结束即可解决;

6.mysql启动

service mysql start
# 作者系统上用不了,直接重定向到下面这条命令
/bin/systemctl start mysql.service

7.设置mysql密码

mysqladmin -u root password "123"

8.设置mysql开机自启动

chkconfig mysql on
# 作者系统重定向到
systemctl enable mysql.service

9.开放3306端口(四台都要设置)
参考该文章CentOS 7.5 如何开放80、8080、3306等端口

# 由于centos7 默认的防火墙是firewalld, 因此需要卸载firewalld,安装iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld.service

yum install iptables-services -y

systemctl enable iptables
systemctl start iptables

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

10.开启mysql远程访问权限(四台都要设置)

grant all on *.* to 'root'@'%' identified by 'root';

11.配置master

vim /etc/my.cnf

###################################[mysqld]节点下加入两行配置
server-id=1
log-bin=mysql-bin #启用二进制日志
重启
systemctl restart mysqld.service

登录
mysql -u root -p

数据库锁表,不让写数据
mysql> flush tables with read lock;

查看MASTER状态(记住File值和Position值,后续要在Slave中配置)
mysql> show master status;

12.配置slave

#   打开slave1 进行设置
vim /etc/my.cnf
##########################[mysqld]节点下加入一行配置:
server-id=2 #集群中server-id不能重复
#   打开slave2 进行设置
vim /etc/my.cnf
##########################[mysqld]节点下加入一行配置:
server-id=3 #集群中server-id不能重复
重启两台slave 服务器
systemctl restart mysqld.service
通过mysql命令配置同步日志的指向:

mysql> change master to master_host='192.168.133.138', master_port=3306, master_user='root', master_password='123', master_log_file='mysql-bin.000002', master_log_pos=120;

----------------------------
master_host主服务器的IP地址

master_port主服务器的PORT端口

master_log_file和主服务器show master status中的File字段值相同

master_log_pos和主服务器show master status中的Position字段值相同
启动slave
mysql> start slave;

mysql> show slave status\G;

此时,问题出现了,作者本人的系统并没有像文章中所说的IO线程与SQL线程都显示"YES", 而是IO线程一直处于“CONNECTING”,作者本人查阅一下午,最终找到了原因:
mysql无法远程连接问题(ERROR 1045 (28000): Access denied for user ‘root’)

根据这篇文章中所说的,执行如下命令便可:

create user 'root'@'172.17.0.%' identified by '123456';
grant all privileges on *.* to 'root'@'172.17.0.%' with grant option;

说到底,发生该问题其实还是MySQL版本的问题,修改外部访问权限所导致的文人。

执行结束之后,重新启动slave服务器便会发现IO线程处于“YES”状态;

在这里插入图片描述

设置Slave为只读(但root用户还是可以做修改操作):

mysql> set global read_only = 1;

13.接触master锁定

mysql> unlock tables;

此时便完成了MySQL主从复制,以及读写分离的操作(下期写Redis与MySQL同步)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值