mysql双主热备集群搭建
作者:互联网
-
安装前清理
-
由于centos7中使用mariadb代替了MySQL,所以需要先清理mariadb
rpm -qa|grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
-
下载并安装mysql
下载并安装MySQL官方的 Yum Repository
wget -i -c https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
yum -y install mysql80-community-release-el7-1.noarch.rpm
安装MySQL服务器
yum -y install mysql-community-server
-
启动MySQL
systemctl start mysqld.service
systemctl status mysqld.service
-
Mysql****初始化配置
cat /var/log/mysqld.log | grep password
mysql在安装后会创建一个root@locahost账户,并且把初始的密码放到了/var/log/mysqld.log文件中;
-
-
登录并修改密码
mysql -u root -p
mysql -h192.168.88.52 -P3306 -ucp -pMyNewPass4!
ALTER USER ‘root’@‘localhost’ IDENTIFIED with mysql_native_password BY ‘MyNewPass4!’;
update user set host =’%’ where user =‘root’;
-
防火墙设置
关闭防火墙:systemctl stop firwalld
禁止防火墙开机启动:systemctl disable firealld
防火墙开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
防火墙重新载入设置:firewall-cmd --reload
-
使用navicat连接
如果提示 Host XXX is not allowed to connect to this MySQL server
use mysql;
select host from user where user =‘root’;
update user set host =’%’ where user =‘root’;
alter user ‘root’@‘localhost’ identified with mysql_native_password by ‘MyNewPass4!’;
如果出现 MySQL 连接出现 Authentication plugin caching_sha2_password cannot be loaded
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘MyNewPass4!’;
flush privileges;
-
关闭
vi /etc/selinux/config
SELINUX=disabled
-
双机热备
A服务器:192.168.88.52服务器,
B服务器:192.168.88.179服务器
-
配置由A—>B的主从同步
A服务器操作:
-
创建用户备份的用户
CREATE USER ‘cp_user’@‘192.168.88.179’ IDENTIFIED WITH mysql_native_password BY ‘MyNewPass4!’;
GRANT REPLICATION SLAVE ON . TO ‘cp_user’@‘192.168.88.179’;
-
修改 MySQL配置文件:vim /etc/my.cnf,配置内容如下:
port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #开始binlog日志 log-bin=mysql-bin #设置binlog日志模式, #STATEMENT:记录的是数据库上执行的原生SQL语句 #ROW:记录的是数据表的行是怎样被修改的。 #MIXED:混合模式, #如果设置了这种格式,MariaDB / MySQL 会在一些特定的情况下自动从 STATEMENT 格式切换到 ROW 格式。 #例如,包含 UUID 等不确定性函数的语句,引用了系统变量的语句等等。 binlog_format=mixed #=================开启binlog #设置该数据库是否为只读库 0否1是 read-only=0 #服务器唯一表示,每台服务器必须配置不一样,最好不要为0 server-id=5 #需要备份的数据库名称(可选) binlog-do-db=test_db #表示自增字段每次递增的量 auto-increment-increment=2 #表示自增字段初始值,从1开始,不能超过auto-increment-increment auto-increment-offset=1
-
修改完毕保存后,重新启动mysql
service mysqld restart
-
登录mysql后,查询master状态
mysql -uroot -pMyNewPass4!
show master status
-
-
记住mysql-bin.000001和1554 这两个值,后续配置从服务器时会用到,这两个值可能会不一样
mysql-bin.000001:binlog文件的名称
1554:从文件什么位置开始读取
**B服务器操作:**
- 修改 MySQL配置文件:vim /etc/my.cnf,配置内容如下:
```properties
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin=mysql-bin
binlog_format=mixed
server-id=12
#开启中继日志
replicate-do-db=test_db
relay-log=mysql.relay.bin
log-slave-updates=ON
```
- 登录MySQL后,执行同步命令
```sql
- CHANGE MASTER TO MASTER_HOST='192.168.88.52',MASTER_USER='cp_user',MASTER_PASSWORD='MyNewPass4!', master_log_file='mysql-bin.000001',master_log_pos=857;
```
重启mysql,查询slave状态
service mysql restart
mysql -uroot -pMyNewPass4!
Show slave status\G
Last Error 为0 即可认为配置正确。
如果出现connection error 考虑关闭A服务器防火墙或清空iptables (iptables -F)
- 测试
在A和B服务器上登陆MySQL运行如下脚本创建数据库test_db;
```sql
CREATE DATABASE IF NOT EXISTS test_db default charset utf8 COLLATE utf8_general_ci;
```
单独在A服务器上创建表,并插入数据
```sql
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 的主从复制完成
-
配置由B—>A的主从同步
B服务器操作:
-
创建同步A服务器的用户
CREATE USER ‘cp_user’@‘192.168.88.52’ IDENTIFIED WITH mysql_native_password BY ‘MyNewPass4!’;
GRANT REPLICATION SLAVE ON . TO ‘cp_user’@‘192.168.88.52’;
-
开启binlog
vim /etc/my.cnf 插入如下内容
#开启binlog read-only=0 binlog-do-db=test_db auto-increment-increment=1 auto-increment-offset=1
-
显示master状态
show master status
A服务器操作:
-
开启中继日志,添加如下配置
#开启中继日志 replicate-do-db=test_db relay-log=mysqld-relay-bin log-slave-updates=ON
-
执行同步命令
CHANGE MASTER TO MASTER_HOST='192.168.88.52',MASTER_USER='cp_user',MASTER_PASSWORD='MyNewPass4!', master_log_file='mysql-bin.000001',master_log_pos=857;
master_log_file和master_log_pos填入B服务器对应的master的值
-
查看slave状态
show slave status\G;
此时A—>B 和B—>A的同步均已完成
-
标签:log,db,双主热备,集群,user,mysql,服务器,mysqld 来源: https://blog.csdn.net/qq_34069839/article/details/118385012