Centos7+Mysql8双机热备(主-主复制HA) 操作说明

2020-05-26 21:50:19 浏览数 (1)

Centos7 Mysql8双机热备(主-主复制HA) 操作说明

庞国明,2018-09-13

1.1 操作前的准备

  1. 两台服务器,并同时按照Centos7.3新装版本(必须装相同版本);
  2. 如果有外网链接则配置Centos7联网、安装wget工具,如果没有外网链接则跳到 “1.2 centos7下安装mysql”;

配置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 statusG(看到下面信息)

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 statusG

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服务器的etcmy.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 statusG

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双机热互备配置完毕。

0 人点赞