centOS镜像百度云地址
链接:https://pan.baidu.com/s/1ppwoEMHd3i9S1McegCaEqg
提取码:0b0y
主机名 | ip | 服务 |
---|---|---|
mysql_centOS_1 | 192.168.137.137 | mysql+keepalived |
mysql_centOS_1 | 192.168.137.137 | mysql+keepalived |
这里使用5.7
下载地址:https://downloads.mysql.com/archives/community/
百度云链接
链接:https://pan.baidu.com/s/1uwdRV6B6qDtOCELadQGx1Q
提取码:1rve
在本地下载完成后使用shell工具上传到虚拟机
创建一个文件夹存放
mkdir /usr/local/server
进入文件夹
cd /usr/local/server/
tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar
在移动,并重命名
mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql
groupadd mysql
useradd -r -g mysql mysql
创建数据目录并赋予权限
mkdir -p /data/mysql #创建目录
chown mysql:mysql -R /data/mysql #赋予权限
vim /etc/my.cnf
或者 使用shell工具直接修改
cd /etc
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
进入mysql/bin目录
cd /usr/local/mysql/bin/
初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
查看初始密码
cat /data/mysql/mysql.err
启动
service mysql start
ps -ef|grep mysql
进入mysql/bin 目录
cd /usr/local/mysql/bin
./mysql -u root -p
密码是随机生成的,之前复制的
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
use mysql #访问mysql库
update user set host = '%' where user = 'root'; #使root能再任何host访问
FLUSH PRIVILEGES; #刷新
开启防火墙
1、开启防火墙
systemctl start firewalld
2、开放指定端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
3、重启防火墙
firewall-cmd --reload
4、查看端口号
netstat -ntlp //查看当前所有tcp端口
连接成功
执行一下操作,不用每次在/mysql/bin目录下登录了
ln -s /usr/local/mysql/bin/mysql /usr/bin
安装完mysql_centOS_1后可以克隆镜像或再到mysql_centOS_2上操作一次,克隆镜像在做同步的时时需要修改uuid,后面会提到
完成后会自动添加到列表中,如未自动添加,执行如下操作
找到.vmx文件
由于第二台虚拟机是直接克隆的,会导致mysql的uuid会一样,在后面配置同步链路是会失败,修改其中一台的uuid就行了
cd /data/mysql/
vim auto.cnf
按i或者o进入编辑模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210525100147653.png
修改完成后,按esc,再 : 进入指令模式,输入 wq 按 enter 保存退出
修改主机 mysql_CentOS_1的配置文件
vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
server_id=137 #保持唯一,一般和自己的ip尾号保持一致
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
log-bin=/data/mysql/log_bin
relay-log=/data/mysql/relay-bin #指定中继日志
relay-log-index=relay-bin.index
auto_increment_increment=2 #表示自增长字段每次递增的量,值应设为整个结构中服务器的总数,我这里用到两台服务器,所以值设为2
auto_increment_offset=1 #是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突。
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
修改主机 mysql_CentOS_2的配置文件
vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
server_id=138
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
log-bin=/data/mysql/log_bin
relay-log=/data/mysql/relay-bin #指定中继日志
relay-log-index=relay-bin.index
auto_increment_increment=2 #表示自增长字段每次递增的量,值应设为整个结构中服务器的总数,我这里用到两台服务器,所以值设为2
auto_increment_offset=2 #是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突。
注:可以在my.cnf文件中添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定要同步的数据库
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
mysql -u root -p
123456
mysql> grant replication slave on *.* to rep@'%' identified by '123456';
mysql> flush privileges;
mysql> show master status\G
*************************** 1. row ***************************
File: log_bin.000006
Position: 696
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
mysql>
#指定master地址
mysql> change master to master_host='192.168.137.137', # mysql_CentOS_1的ip
-> master_user='rep',
-> master_password='123456',
-> master_log_file='log_bin.000006', #必须和master上查看到的名字一样
-> master_log_pos=696; #同上,这个值也是在master上查看到的
#启动slave功能
mysql> start slave;
#确定配置成功
mysql> show slave status\G #查看slave状态
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.137.138
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log_bin.000007
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000009
Relay_Log_Pos: 318
Relay_Master_Log_File: log_bin.000007
Slave_IO_Running: Yes # 这个值必须为Yes
Slave_SQL_Running: Yes # 这个值也必须为Yes
#只要上面两个值为yes,则表示主从没有问题,
#其中,IO线程是去master上面读取二进制日志到本地的中继日志中;
SQL线程是将本地的中继日志中的内容转换为sql语句并执行。
mysql -u root -p
123456
mysql> grant replication slave on *.* to rep@'%' identified by '123456';
mysql> flush privileges;
mysql> show master status\G
*************************** 1. row ***************************
File: log_bin.000007
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.02 sec)
主机mysql_CentOS_1上操作如下:
指定mysql_CentOS_2为master
mysql> change master to master_host='192.168.137.138',
-> master_user='rep',
-> master_password='123456',
-> master_log_file='log_bin.000007',
-> master_log_pos=154;
mysql> start slave; #启动slave
mysql> show slave status\G #查看slave状态
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.137.137
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log_bin.000006
Read_Master_Log_Pos: 696
Relay_Log_File: relay-bin.000006
Relay_Log_Pos: 318
Relay_Master_Log_File: log_bin.000006
#确保下面两个值为yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql_CentOS_1创建test数据库,test1表
-- 建表sql
CREATE TABLE `test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;
两个节点都执行以下操作
yum -y install keepalived
查看本机网卡
ifconfig
cd /etc/keepalived
vi /etc/keepalived/keepalived.conf
[root@mysql1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql-1 #此处的值必须唯一
}
vrrp_instance VI_1 {
state BACKUP #指定角色为backup,两台MySQL服务器的角色均为backup,设置backup将根据优先级决定主从
interface ens33 #指定承载虚拟IP的网卡
virtual_router_id 51 #指定组,同一个集群内的值必须一致。并且不可和局域网中的其他组冲突
priority 100 #优先级范围为:0~100
advert_int 1 #发vrrp包的时间间隔,即多久进行一次master选举(可认为是健康检查时间间隔)
nopreempt #不抢占,即允许一个priority比较低的节点作为master,
authentication { #认证区域
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VIP区域,指定vip地址
192.168.137.120
}
}
virtual_server 192.168.137.100 3306 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 2 #设置运行情况检查时间,单位是秒
lb_algo rr #设置后端调度算法
lb_kind DR #设置lvs实现负载均衡的机制,有NAT、TUN、DR三个模式,DR模式效率最高
persistence_timeout 60 #会话保持时间,单位是秒
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.137.137 3306 { #配置服务节点,这里指定的也就是本机的真实IP
weight -20 #设置权重
notify_down /etc/keepalived/bin/mysql.sh #检测到real_server的MySQL服务宕机后执行的脚本。
TCP_CHECK {
connect_port 3306 #健康检查端口
connect_timeout 3 #连接超时时间
retry 3 #重试次数
delay_before_retry 3 #重连间隔时间
}
}
}
mkdir /etc/keepalived/bin
cd /etc/keepalived/bin
vim bin/mysql.sh
#!/bin/bash
pkill keepalived #停止keepalived服务
chmod +x bin/mysql.sh #赋予脚本执行权限
systemctl start keepalived #启动keepalived服务
cd /etc/keepalived/
! Configuration File for keepalived
global_defs {
router_id mysql-2 #更改router_id,此处在热备组中必须要唯一
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90 #更改优先级
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.137.120
}
}
virtual_server 192.168.137.20 3306 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.137.138 3306 { #更改为本机的IP地址及监听端口
weight -20
notify_down /etc/keepalived/bin/mysql.sh
TCP_CHECK {
connect_port 3306
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
mkdir /etc/keepalived/bin
cd /etc/keepalived/bin
vim bin/mysql.sh
#!/bin/bash
pkill keepalived #停止keepalived服务
chmod +x bin/mysql.sh #赋予脚本执行权限
systemctl start keepalived #启动keepalived服务
现有192.168.137.137 192.168.137.138两台数据库服务器,互为主从
使用keepalived配置虚拟ip为 192.168.137.120
使用Navicat连接
测试插入一条数据
往120虚拟IP连接中插入一条
137,138两台都可看到
测试停止137
再次插入
重新启动137
137有新增
测试关闭138
插入一条
137
重启138
有停机时加入的数据