安装mysql配置主从或双主互备+keepalived实现高可用

安装mysql

下载mysql安装包并安装

准备工作

百度网盘链接: https://pan.baidu.com/s/1yNVGNMhwwzsVNFQ2efCCfg.
提取码:2333

检查是否安装过 mysql
rpm -qa|grep mariadb
如果存在请先执行卸载命令:
rpm -e --nodeps mariadb-libs
检查 mysql 依赖环境, 如果不存在, , 则 进行m yum  install 安装
rpm -qa | grep libaio
rpm -qa | grep net-tools
rpm -qa | grep perl
检查 /tmp文件夹权限
由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,
所以请给/tmp较大的权限 ,执行 :chmod -R 777 /tmp

开始安装

按顺序安装!
rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm  #该包在安装keepalived时可能需要

查看安装版本:mysqladmin --version
查看mysql用户:id mysql
提示:如在检查工作时,没有检查mysql依赖环境在安装mysql-community-server时会报错。

mysql初始化

mysqld --initialize --user=mysql
临时生成一个密码在/var/log/mysqld.log下

在这里插入图片描述
提示:在初始化时,有可能会遇到初始化报错。如下所示:
在这里插入图片描述
只需要将:默认的存放 mysql 数据文件的目录[rm -rf /var/lib/mysql/]删除,然后重新初始化即可.

登录数据库

要修改MySQL,首先必须启动MySQL服务,使用初始化密码登录后,才能修改密码:
启动MySQL服务:systemctl start mysqld.service
关闭MySQL服务:systemctl stop mysqld.service
查看MySQL状态:systemctl status mysqld.service
mysql -uroot -p临时密码 
或者
mysql -u root -p   回车  再输入密码
首次登录, ,修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

设置Mysql 开机自启动 :

systemctl enable mysqld.service

中文编码问题

通过SHOW VARIABLES LIKE '%char%'查看数据库编码问题,会发现默认latin1字符编码,不支持中文
解决:
vim /etc/my.cnf
在[mysqld]节点最后加上中文字符集配置:character_set_server=utf8
重启数据库
systemctl restart mysqld: 完成后创建新库、新表即可【支持中文】。

授权远程访问

	grant all privileges on *.* to root@'%' identified by '123456';
	flush all privileges;

开放数据库端口 或者 直接关闭防火墙 否则可能无法访问

//开放端口
// --permanent 永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=3306/tcp --permanent
//重新载入使设置生效
firewall-cmd --reload
//关闭防火墙
systemctl stop firewalld

实现mysql:主从复制=》双主配置

服务器master配置:
修改/etc/my.cnf
#设置log-bin与server-id
[mysqld]
server-id=1			#每台数据库的编号,两台服务器必需不同
log-bin=mysql-bin		#主库日志,数据同步采用日志,必需开启
binlog_format = row		#binlog日志类型
auto-increment-increment=2		#双主模式,保障自增id不冲突
auto-increment-offset=1			#双主模式,保障自增id不冲突
#replicate-do-db=dbtest1			#需要同步的数据库名称,多个数据库用逗号分隔
#replicate-ignore-db=mysql,information_schema	#不需要同步的数据库名称,多个数据库用逗号分隔
log-slave-updates=true		#打开同步
#sync-binlog=1		#每次更新立即同步,避免数据未及时写入异常,导致的数据丢失(影响性能自主选择是否设置)
relay-log=mysql-relay	#从库日志
datadir=/data/mysql		#数据文件目录
port=3306	#监听端口
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
配置修改完成后重启mysql
sudo service mysql restart
进入master服务器的mysql客户端,查看master状态

在这里插入图片描述

服务器slave配置
修改/etc/my.cnf配置文件
[mysqld]
server-id=2
log-bin=relay-bin
auto-increment-increment=2
auto-increment-offset=2
relay-log=mysql-relay
replicate-do-db=dbtest1
replicate-ignore-db=mysql,information_schema
log-slave-updates=true
sync-binlog=1
datadir=/data/mysql
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
重启mysql
sudo service mysql restart
进入slave服务器的mysql客户端,执行命令:
mysql>
CHANGE MASTER TO 
MASTER_HOST='master的ip',
MASTER_USER='所有权限的用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000008',	#master客户端中master状态中的file值
MASTER_LOG_POS=154;  #master客户端中master状态中的Position
启动slave
mysql> start slave;

在这里插入图片描述

图中蓝色部分全为yes代表主从复制成功
下面配置实现双主互备 
!查看salve的mysql客户端master状态 :show master status;
在原来master的mysql客户端执行以下命令
mysql>
CHANGE MASTER TO 
MASTER_HOST='slave的ip',
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001', #slave客户端中master状态中的file值
MASTER_LOG_POS=120;		#slave客户端中master状态中的Position
查看master的mysql客户端slave的状态:show slave status\G;
结果与上文蓝色部分结果都为yes即配置成功

安装keepalived

下载keepalived安装包&&编译安装

注意!安装过程中可能存在缺少环境依赖的问题 需要提前准备 看文章开头 未涉及的自行解决
wget命令安装:yum -y install wget
编译依赖安装:yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel

#进入/usr/local/src 目录
cd /usr/local/src/
#下载keepalived安装包
wget https://www.keepalived.org/software/keepalived-2.0.17.tar.gz
#解压
tar -zxvf keepalived-2.0.17.tar.gz
#进入解压后的目录
cd keepalived-2.0.17
./configure --prefix=/usr/local/keepalived
make && make install

编译安装成功后使用如下命令查看
[root@localhost ~]# cd /usr/local/keepalived/sbin/
[root@localhost sbin]# ll
总用量 2352
-rwxr-xr-x 1 root root 2408176 621 16:26 keepalived
#拷贝文件
cp keepalived /usr/sbin/
#成功后使用下方命令查看
[root@localhost sbin]#  ll /usr/sbin/keepalived
lrwxrwxrwx 1 root root 37 621 16:16 /usr/sbin/keepalived -> /usr/local/keepalived/sbin/keepalived
设置开机自启动 
如果disabled 则使用下方命令设置开机自启
[root@localhost sbin]# systemctl list-unit-files|grep keepalived
keepalived.service                            enabled 
[root@localhost sbin]# systemctl enable keepalived
配置文件拷貝一份到/etc/keepalived下(默认配置文件位置),命令如下
[root@master1 sbin]# mkdir /etc/keepalived
[root@master1 sbin]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@localhost sbin]# ll /etc/keepalived/
总用量 8
-rw-r--r-- 1 root root 683 621 16:30 keepalived.conf

修改配置文件

对/etc/keepalived下的keepalived.conf文件配置修改:

keepalive中//注释部分自行删 会影响配置文件读取
需要注意的几个参数:1、router_id 标识,通常为主机名
2、interface 后面是你的网卡 可以通过ip addr查看
3、priority 优先级,同一个vrrp_instance 的MASTER优先级必须比BACKUP 高
4、virtual_ipaddress 虚拟ip地址
5、real_server 真实服务地址

! Configuration File for keepalived

global_defs {  		//主要是配置故障发生时的通知对象以及机器标识
   router_id db01 	//标识本节点的字符串, 通常为hostname
}

vrrp_instance VI_1 { 
//VRRP 实例state MASTER // MASTER 或BACKUP,为了防止脑裂现象,主备均需要设置为backup 模式,master 模式会抢占VIP
    state BACKUP
    interface ens33 	//节点固有IP(非VIP)的网卡,用来发VRRP 包
    virtual_router_id 51 //取值在0-255 之间,用来区分多个instance 的VRRP 组播priority 100 //优先级,同一个vrrp_instance 的MASTER优先级必须比BACKUP 高
    priority 100
    nopreempt		//非抢占,配合backup,防止切换后,主库服务恢复正常后,IP 漂移过来advert_int 1// MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
    advert_int 1  // MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    //虚拟ip 地址,可以有多个地址,每个地址占一行,不需要子网掩码
        192.168.110.120
    }
}
virtual_server 192.168.110.120 3306 {
    delay_loop 6  //健康检查间隔,单位为秒
    persistence_timeout 50  // 会话保持时间,就是把用户请求转发给同一个服务器
    protocol TCP //转发协议,有TCP 和UDP 两种,一般用TCP
    
	//真实服务器,包括IP和端口号
    real_server 192.168.110.133 3306 {  
        notify_down /etc/keepalived/kill_keepalived.sh
        TCP_CHECK { //通过tcpcheck 判断RealServer 的健康状态
            connect_timeout 3 //连接超时时间
            nb_get_retry 3		//重连次数
            connect_port 3306	//连接接口
            delay_before_retry 3	//检测端口
        }
    }
}
编写检测mysql脚本文件
vim /etc/keepalived/kill_keepalived.sh
脚本文件内容如下

脚本需要赋予执行权限:chmod 777 /etc/keepalived/kill_keepalived.sh

#!/bin/bash
kill -9 $(cat /var/run/keepalived.pid)
从服务器的keepalived安装操作与主服务器雷同 但注意配置的router_id、real_server 、priority等参数修改
! Configuration File for keepalived

bal_defs {
   router_id db02
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.110.120
    }
}
virtual_server 192.168.110.120 3306 {
    delay_loop 6
    persistence_timeout 50
    protocol TCP

    real_server 192.168.110.134 3306 {
        notify_down /etc/keepalived/kill_keepalived.sh
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            connect_port 3306
            delay_before_retry 3
        }
    }
}

测试keepalived高可用

分别启动keepalive
systemctl start keepalived
查看启动状态
systemctl status keepalived
或者
ps -ef|grep keepalived
启动后看虚拟ip绑定的服务器 可以看到ens33下显示了vip
vip只会绑定在一台上
[root@localhost sbin]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:da:b2:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.133/24 brd 192.168.110.255 scope global dynamic ens33
       valid_lft 1100sec preferred_lft 1100sec
    inet 192.168.110.120/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::7212:b674:6ae5:dd84/64 scope link 
       valid_lft forever preferred_lft forever
此时连接访问虚拟ip下的数据库可以访问上 

navicat连接成功

关闭虚拟ip所在的服务自mysql
在另一台服务器上查看ip
ip addr
可以看到虚拟主机漂移到了这台上 此时访问虚拟主机数据库还是可以访问 实现了双主互备高可用
[root@localhost sbin]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:78:34:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.134/24 brd 192.168.110.255 scope global dynamic ens33
       valid_lft 1256sec preferred_lft 1256sec
    inet 192.168.110.120/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::a38c:9022:4d81:492b/64 scope link 
       valid_lft forever preferred_lft forever
  • 1
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

把键盘还我!

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值