1. MySQL高可用搭建2
测试环境 安装数据库
wget http://dev.mysql.com/get/mysql57‐community‐release‐el7‐8.noarch.rpm
yum localinstall mysql57‐community‐release‐el7‐8.noarch.rpm ‐y
# 检查是否安装成功
yum repolist enabled | grep "mysql.*‐community.*"
# 安装mysql
yum install mysql‐community‐server ‐y
# 启动mysql
systemctl start mysqld
systemctl status mysqld
# 开机启动
systemctl enable mysqld
systemctl daemon‐reload
# 获取临时密码
grep 'temporary password' /var/log/mysqld.log
# 修改密码 包含大小写字母、数字和特殊符号,并且长度不能少于8位
mysql ‐uroot ‐p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mastar@1994';
# 允许root用户远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY
'Mastar@1994' WITH GRANT OPTION;
# 修改编码
vi /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
# 重启数据库
systemctl restart mysqld
# 登录数据库 查看编码
mysql ‐uroot ‐pMastar@1994
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
master_ip 10.246.250.224
slave_ip 10.246.250.225
VIP 10.246.250.250
配置主主数据同步
1、安全配置
2、master节点配置(10.246.250.224)
2.1、添加数据同步配置
show variables like '%character%';
systemctl stop firewalld
setenforce 0
vi /etc/selinux/config
SELINUX=disabled
vi /etc/my.cnf
# 服务器的ID,必须唯一,一般设置自己的IP
server_id=224 # 下面slave节点server_id与此不一致
# 复制过滤:不需要备份的数据库(MySQL库一般不同步)
binlog‐ignore‐db=mysql
# 开启二进制日志功能,名字可以随便取,最好有含义(比如项目名)
log‐bin=skiff‐mysql‐bin
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
29
1 2 3 4 1 2 3 4 5 6 7 8
2.2、master配置
2.3、slave配置
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中
断。
## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 作为从服务器时的中继日志
relay_log=skiff‐mysql‐relay‐bin
# log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
log_slave_updates=1
# 主键自增规则,避免主从同步ID重复的问题
auto_increment_increment=2 # 自增因子(每次加2)
auto_increment_offset=1 # 自增偏移(从1开始),单数
systemctl restart mysqld
mysql ‐uroot ‐pMastar@1994
grant replication slave, replication client on *.* to
'repl'@'10.246.250.225' identified by 'Mastar@1994';
flush privileges;
# 查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要
用到
show master status;
# master_user和master_password:在225'上执行grant replication
slave...创建的用户和密码
# master_log_file和master_log_pos:在225上运行show master status;
命令执行结果对应File和Position字段的值
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 1 2
3、slave节点配置(10.246.250.225)
3.1、添加数据同步配置
change master to master_host='10.246.250.225',master_user='repl',
master_password='Mastar@1994', master_port=3306,
master_log_file='skiff‐mysql‐bin.000002', master_log_pos=632,
master_connect_retry=30;
start slave;
show slave status\G;
# Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两个选项是YES时
说明正常
vi /etc/my.cnf
# 服务器的ID,必须唯一,一般设置自己的IP
server_id=225
# 复制过滤:不需要备份的数据库(MySQL库一般不同步)
binlog‐ignore‐db=mysql
# 开启二进制日志功能,名字可以随便取,最好有含义(比如项目名)
log‐bin=skiff‐mysql‐bin
# 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中
断。
## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 作为从服务器时的中继日志
relay_log=skiff‐mysql‐relay‐bin
# log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
log_slave_updates=1
# 主键自增规则,避免主从同步ID重复的问题
auto_increment_increment=2 # 自增因子(每次加2)
auto_increment_offset=1 # 自增偏移(从1开始),单数
3 4 5 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
3.2、master配置
3.3、slave配置
4、验证
systemctl restart mysqld
mysql ‐uroot ‐pMastar@1994
grant replication slave, replication client on *.* to
'repl'@'10.246.250.224' identified by 'Mastar@1994';
flush privileges;
# 查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要
用到
show master status;
# Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两个选项是YES时
说明正常
# master_user和master_password:在224上执行grant replication
slave...创建的用户和密码
# master_log_file和master_log_pos:在224上运行show master status;
命令执行结果对应File和Position字段的值
change master to master_host='10.246.250.224',master_user='repl',
master_password='Mastar@1994', master_port=3306,
master_log_file='skiff‐mysql‐bin.000002', master_log_pos=632,
master_connect_retry=30;
start slave;
show slave status\G;
# 登录224创建一个数据库
shell> mysql ‐u root ‐p
mysql> create database if not exists mydb default character set
utf8 collate utf8_general_ci;
mysql>use mydb;
mysql> create table user (id int, username varchar(30), password
varchar(30));
1 2 3 4 5 6 7 1 2 3 4 5 1 2 3 4 5
安装keepalived
修改配置文件
mysql> insert into user values (1, 'mmx', '123456');
# 下面是在225节点上的操作
#1、登录225查询所有库,是否包含mydb数据库
#2、切换到mydb库,是否包含user表,并有一条数据
#3、在225的mydb.user表插入一条数据,查看是否同步过去
mysql> insert into user values (2,'mmx1','123456');
yum ‐y install keepalived
# 开机启动
systemctl enable keepalived
vi /etc/keepalived/keepalived.conf
global_defs {
} v
rrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
priority 100 # 从节点配置90
nopreempt # 主节点配置,从节点不用配置
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
} v
irtual_ipaddress {
10.246.250.250
}
} v
irtual_server 10.246.250.250 3306 {
delay_loop 6
6 7 8 9 10 11 1 2 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
添加脚本
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 10.246.250.224 3306 { # 从节点配置时换成从节点IP
weight 1
notify_down /usr/local/keepalived/mysql.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
} m
kdir /usr/local/keepalived/
vi /usr/local/keepalived/mysql.sh
#!/bin/bash
pkill keepalived
chmod +x /usr/local/keepalived/mysql.sh
systemctl restart keepalived