mysql 主主复制

Centos7+Mysql8双机(主-主复制HA

 

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 ~]#service mysqld start

查看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

修改初始密码:kt8qMzQ-0!?_

ALTER USER 'root'@'localhost' IDENTIFIED BY 'hqmart@2021';

如果想要设置简单密码(如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       小结

 

service mysql restart

 

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

 

主备不一致处理:

1、在备库上stop slave;

2、在主库上停止写入:flush tables with read lock;   多show master status几遍,log号应不变

3、用mysqldump导出主库备份上传到备库  mysqldump -uroot -p --all-databases > m.sql             scp m.sql  root@xxxx:/root

     用mysql -uroot -p < m.sql

4、主库show master status;记录binlog File 文件名称和 Position值

5、备库上CHANGE MASTER TO MASTER_HOST='1.1.1.1', MASTER_USER='replication', MASTER_PASSWORD='mima@143', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

6、在备库上start slave;

7、在备库上show slave status;

8、主库上unlock tables;   

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值