Centos7+Mysql8双机热备(主-主复制HA) 操作说明
庞国明,2018-09-13
1.1 操作前的准备
配置Centos7 联网
新装Centos7默认联网是关闭的,可以通过以下步骤设置开机联网
第一步:[root@localhost ~]# cd /etc/sysconfig/network-scripts/
第二步:[root@localhost ~]# ls
这时候你会发现没有教程上说的ifcfg-eth0文件,打开第一个即可。
有的教程找不到就新建一个,肯定是错的。
第三步:[root@localhost ~]# vi ifcfg-eno167777736
第四步:修改ONBOOT为yes 保存退出(参考vi使用方法)
第五步:[root@localhost ~]# service network restart
Centos7 下安装wget
本次操作采用Centos 的yum源安装,需要先下载rpm包,因此我们需要先安装wget下载工具
[root@localhost ~]# yum install wget
安装期间会提示确认提示,输入y 确认安装即可。
1.2 Centos7 下安装MySQL 8
注意:两台服务器上必须安装相同版本的mysql
第一步:查看是否有旧版本,如果有就删除
检查旧版本,命令
rpm -qa|grep mariadb
rpm -qa|grep mysql
列出所有被安装的rpm package ,命令
rpm -qa | grep mariadb
卸载,命令
rpm -e mariadb-libs-5.5.52-1.el7.x86_64
如果出现错误:依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
解决办法为强制卸载,因为没有--nodeps
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
第二步:下载并安装MySQL
有外网链接情况下安装MySQL8:
下载并安装MySQL官方的 Yum Repository
[root@localhost ~]# wget -i -c https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
使用上面的命令就直接下载了安装用的Yum Repository,然后就可以直接yum安装了。
[root@localhost ~]# yum -y install mysql80-community-release-el7-1.noarch.rpm
之后就开始安装MySQL服务器。
[root@localhost ~]# yum -y install mysql-community-server
直到提示 install complete mysql安装完毕
无外网连接情况下通过安装包安装MySQL8
创建目录启动之前,不然会报错,启动失败
mkdir -p /usr/local/mysql/var
解压安装包
tar -xvf mysql-8.0.12-1.el7.x86_64.rpm-bundle.tar
rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
安装msyql
rpm -ivh mysql-community-common-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.12-1.el7.x86_64.rpm
卸载顺序
rpm -e mysql-community-server-8.0.12-1.el7.x86_64
rpm -e mysql-community-client-8.0.12-1.el7.x86_64
rpm -e mysql-community-libs-8.0.12-1.el7.x86_64
rpm -e mysql-community-common-8.0.12-1.el7.x86_64
复制my.cnf文件至/etc/
rm -rf /etc/my.cnf
cp my.cnf /etc/
初始化系统
mysqld --initialize-insecure --user=mysql
第三步:启动MySQL
[root@localhost ~]# systemctl start mysqld.service
查看MySQL运行状态,运行状态如图:
[root@localhost ~]# systemctl status mysqld.service
第四步:Mysql初始化配置
获取初始密码登录mysql
mysql在安装后会创建一个root@locahost账户,并且把初始的密码放到了/var/log/mysqld.log文件中;
[root@localhost ~]# cat /var/log/mysqld.log | grep password
使用初始密码登录mysql
mysql -u root -p
修改初始密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
如果想要设置简单密码(如abc、123),根据mysql8默认密码策略是不允许的,可以修改默认密码策略,来达到此目的
set global validate_password.policy=0;
set global validate_password.length=4;
1.3 防火墙、iptable设置
因为 mysql 双机热备需要相互远程访问mysql服务器,因此需要两台服务器都开放3306端口,或者直接关闭防火墙。
关闭防火墙:systemctl stop firwalld
禁止防火墙开机启动:systemctl disable firealld
防火墙开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
防火墙重新载入设置:firewall-cmd --reload
1.4 双机热备份(主-主复制HA集群)配置
首先保证两台服务器mysql版本一致,同时防火墙都对3306开放
当前环境:
A服务器 ip:172.20.201.23 准备作为主服务器master
B服务器 ip: 172.20.201.24 用于备份的服务器slave
1.4.1 搭建 A—>B 的主从复制
1.4.1.1 操作步骤
在A服务器上操作
第一步:创建专门用于备份的 用户(登录mysql之后执行)
CREATE USER 'cp_user'@'172.20.201.24' IDENTIFIED WITH mysql_native_password BY 'master2018!';
GRANT REPLICATION SLAVE ON *.* TO 'cp_user'@'172.20.201.24';
(注意:这里的cp_user 和 master2018! 是一会儿备份服务器配置是需要用到的master服务器的用户名和密码,需要记下来)
第二步:修改 MySQL配置文件: /etc/my.cnf,添加如下内容:
log-bin=mysql-bin
binlog_format=mixed
server-id=1 //服务器唯一性标识符,每台服务器配置必须保存不一样
read-only=0
binlog-do-db=test_db//需要备份的那个数据库名叫 “test_db”(可选)
auto-increment-increment=2 //这里设置用来台服务器来做备份,按个人情况定
auto-increment-offset=1 //表示这台服务器序号,从1开始,不超auto-increment-increment
//配置完该数据库中插入第一个数据id=1,第二条数据id=3而不是2,避免的数据库集群中id冲突
第三步:修改完毕保存后,重新启动mysql
[root@localhost ~]# service mysqld restart
第四步:执行 mysql>show master status\G(看到下面信息)
mysql-bin.000002和154这两个值需要记得后面有用(刚安装完的数据库可能是mysql-bin.000001
到这master已经配置完成了,下面配置备份服务.
B服务器操作:
第一步:修改MySQL /etc/my.cnf 文件,添加如下内容:
log-bin=mysql-bin
binlog_format=mixed
server-id=2 //服务器唯一性标识符,每台服务器配置必须保存不一样
replicate-do-db=test_db //要同步的数据库名
relay-log=mysql.relay.bin
log-slave-updates=ON
第二步:配置完保存修改,重新启动mysql服务。
第三步:登录B服务器的mysql服务器:执行下面命令(配置同步的主服务器)
CHANGE MASTER TO
MASTER_HOST='172.20.201.23',
MASTER_USER='cp_user',
MASTER_PASSWORD='master2018!',
MASTER_LOG_FILE='mysql-bin.000020',
MASTER_LOG_POS=155;
第四步:重启B服务器的MySQL服务:service mysql restart
第五步:使用命令查看B服务器上mysql的slave运行情况,登陆mysql后,运行:
Show slave status\G
Last Error 为0 即可认为配置正确。
如果出现connection error 考虑关闭A服务器防火墙或清空iptables (iptables -F)
1.4.1.2 测试:
在A和B服务器上登陆MySQL运行如下脚本创建数据库test_db;
CREATE DATABASE IF NOT EXISTS test_db default charset utf8 COLLATE utf8_general_ci;
单独在A服务器上创建表,并插入数据
USE test_db;
CREATE TABLE user(
id int not null auto_increment,
user_name VARCHAR(50),
password VARCHAR(10) ,
name VARCHAR(50),
status VARCHAR(10) ,
constraint pk__person primary key(id)
);
INSERT INTO user (`user_name`,`password`,`name`,`status`) VALUES('admin','admin','admin','1');
到B服务器上test_db中查看是否同步了相同的表和数据
已同步,则配置A—>B 的主从复制完成
1.4.1.3 小结
至此,A—>B的主从复制搭建完毕
1.4.2 搭建 B—>A 的主从复制
1.4.2.1 操作步骤
实际就是步骤一的逆向操作。将B(192.168.62.129)作为主服务器,A(192.168.62.130)作为从服务器。步骤基本和上面一样。 其中 A、B服务器的\etc\my.cnf配置文件 继续追加 主从配置内容即可。
1、在B中创建备份用户
CREATE USER 'cp_user'@'172.20.201.23' IDENTIFIED WITH mysql_native_password BY 'master2018!';
GRANT REPLICATION SLAVE ON *.* TO 'cp_user'@'172.20.201.23';
2、打开 /etc/my.cnf , 开启B的binarylog:
新增配置如下:
3、不需要导出B的初态同步到A上了,因为A和B的初态是一样的(步骤一实现的),查看master日志状态。
show master status\G
4、登录到A服务器开启中继relay_log
5、在A服务器上开启同步:
CHANGE MASTER TO
MASTER_HOST='172.20.201.24',
MASTER_USER='cp_user',
MASTER_PASSWORD='master2018!',
MASTER_LOG_FILE='mysql-bin.000017',
MASTER_LOG_POS=155;
host为B的IP地址,user、password是在B上创建的备份用户,log_file、log_pos是在B上看到的master状态信息。
6、在A上查看slave status.
如果IO进程和SQL进程都为YES,说明从B到A的同步成功。
1.4.2.2 测试
在A、B两台服务器中任意一台的MySQL test_db中添加数据另外一台都自动同步。
1.4.2.3 小结
至此,MySQL双机热互备配置完毕。