MySQL高可用安装

MySQL HA部署

环境准备

地址 说明 10.5.12.92 pro-mysql-ha01,主节点 1 10.5.12.93 pro-mysql-ha02,主节点 2 10.5.12.91 pro-mysql-vip,虚拟 Virtual IP

创建本地yum源

上传 CentOS-7-x86_64-DVD-1708.iso 到/opt/software

cd /etc/yum.repos.d/
mkdir bkp
mv *.repo bkp
sudo touch /etc/yum.repos.d/local.repo

编辑文件 local.repo 的内容

[CentOS74]
name=CentOS7.4
baseurl=file:///media
enabled=1gpgcheck=0
gpgkey=file:///media/RPM-GPG-KEY-CentOS-7

挂载并清空yum缓存

mount /opt/software/CentOS-7-x86_64-DVD-1708.iso /media -o loop
yum clean all
yum makecache

确认关闭 SELinux

1、临时关闭:输入命令setenforce 0,重启系统后还会开启。
2、永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。

防火墙设置

使用 root 用户在 pro-mysql-ha01 和 pro-mysql-ha02 上需要将相应的端口(例如 MySQL 使用的 23306 端口)加入到防火墙的过滤规则里面

firewall-cmd --zone=public --add-port=23306/tcp –permanent
firewall-cmd –reload
firewall-cmd –list-all

MySQL高可用安装

MySQL安装

使用 root 用户操作创建相关的用户组和用户

groupadd mysql
useradd -r -g mysql mysql
passwd mysql

上传/解压介质

将 mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz 上传到/opt/software 目录,并解压介质到 目录/opt/mysql

tar zxvf mysql-8.0.22-linux-glibc2.12-x86_64.tar.gz -C /opt
ln -s /opt/mysql-8.0.22-linux-glibc2.12-x86_64 /opt/mysql
yum remove mariadb-libs-5.5.56-2.el7.x86_64 #mariadb 相关内容卸载
mkdir /mysql-data #用来存放 mysql 的数据,后面的配置文件需要用到

编辑/etc/my.cnf 文件,如下

[mysqld]
basedir = /opt/mysql
datadir = /mysql-data
socket = /mysql-data/mysql.sock
skip-name-resolve
log-error = /mysql-data/error.log
pid-file = /mysql-data/mysql.pid
character-set-server=utf8mb4
port=23306
lower_case_table_names = 1
default-storage-engine=INNODB
[client]
socket = /mysql-data/mysql.sock
default-character-set=utf8mb4
port=23306

设置自启动

cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld

修改/etc/init.d/mysqld 的 basedir 和 datadir 为上面指定的实际值
……

basedir=/opt/mysql
datadir=/mysql-data
……

vi /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL
After=syslog.target network.target remote-fs.target nss-lookup.target
Before=shutdown.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/mysql-data/mysql.pid
#Disable service start and stop timeout logic of systemd for mysqld service.

TimeoutSec=0
#Execute pre and post scripts as root
PermissionsStartOnly=true# Start|Stop main service
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
#Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
[Install]
WantedBy=multi-user.target
Alias=mysqld.service

使用 root 用户执行以下的命令修改 basedir 和 datadir 的属主

chown mysql:mysql /etc/init.d/mysqld
chown -Rf mysql:mysql /opt/mysql /opt/mysql-8.0.22-linux-glibc2.12-x86_64
chown -Rf mysql:mysql /mysql-data
systemctl daemon-reload
chkconfig --level 345 mysqld on
chkconfig --add mysqld

Mysql初始化

cd /opt/mysql/bin
./mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/mysql-data
cat /mysql-data/error.log #获取 root 的临时密码

MySQL高可用安装

启动mysql

/opt/mysql/bin/mysqld_safe --user=mysql &

MySQL高可用安装

进入mysql修改root密码

/opt/mysql/bin/mysql -uroot -p
alter user root@'localhost' identified with mysql_native_password by '指定的密码';  #修改root密码
/opt/mysql/bin/mysqladmin -uroot -p -S /mysql-data/mysql.sock shutdown #停止MySQL

MySQL高可用安装

到此,pro-mysql-ha0l 和pro-mysql-ha02上的MySQL安装并设置完毕

主主同步环境配置

1.1.3.1 基础配置
编辑 pro-mysql-ha01 服务器上的文件/etc/my.cnf 的,在 mysqld 部分添加下面的配置

server-id = 1
log_bin = mysql-bin
expire_logs_days=10
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all

使用 root 用户执行 systemctl restart mysqld 重启 mysql 服务

systemctl restart mysqld

登录 mysql 执行一下操作

create user syncoper@'%' identified with mysql_native_password by '指定的密码';
grant replication slave, replication client on *.* to syncoper@'%';
flush privileges;
flush tables with read lock;
show master status;

编辑 pro-mysql-ha02 服务器上的文件/etc/my.cnf 的,在 mysqld 部分添加下面的配置

server-id = 2
log_bin = mysql-bin
expire_logs_days=10
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all

使用 root 用户执行 systemctl restart mysqld 重启 mysql 服务

systemctl restart mysqld

登录 mysql 执行一下操作

create user syncoper@'%' identified with mysql_native_password by '指定的密码';
grant replication slave, replication client on *.* to syncoper@'%';
flush privileges;
flush tables with read lock;
show master status;

pro-mysql-ha01同步操作测试

登录 mysql 命令行,执行下面的操作

unlock tables;
stop slave;
change maste master_host='10.5.15.18', master_user='syncoper',master_password= 'syncoper 的用户密码',master_log_file='mysql-bin.000001',master_log_pos=871;
start slave;
show slave status\G;

MySQL高可用安装
其中master_host 为 dev-mysql-ha02 的地址
master_user 为连接的用户
master_password 为连接密码
master_log_file 为上一步在 dev-mysql-ha02 执行得到 binlog 文件名
master_log_pos 为上一步在 dev-mysql-ha02 执行得到 binlog

pro-mysql-ha02同步操作测试

unlock tables;
stop slave;
change master to master_host='10.5.15.17', master_port=23306,
master_user='syncoper', master_password='syncoper
的 用 户 密 码 ',
master_log_file='mysql-bin.000002', master_log_pos=1435;
start slave;
show slave status\G;

MySQL高可用安装

MySQL +Keepalived配置

Keepalived安装

yum install keepalived

使用 root 用户配置两台服务器上的 keepalived, pro-mysql-ha01 上的配置内容

vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
cgo-ops@qq.com
cgo-tech@qq.com
}
notification_email_from cgo-ops@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MySQL_HA
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51 priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
10.5.15.16
}
}
virtual_server virtual_server 10.5.15.16 23306 {
delay_loop 2
persistence_timeout 50
protocal TCP
real_server 10.5.15.17 23306 {
weight 3
notify_down /opt/mysql/monitor/switch_keepalived.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

pro-mysql-ha02 上的配置内容

! Configuration File for keepalived
global_defs {
notification_email {
cgo-ops@qq.com
cgo-tech@qq.com
}
notification_email_from cgo-ops@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MySQL_HA
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
10.5.15.16
}}
virtual_server virtual_server 10.5.15.16 23306 {
delay_loop 2
persistence_timeout 50
protocal TCP
real_server 10.5.15.18 23306 {
weight 3
notify_down /opt/mysql/monitor/switch_keepalived.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

修改防火墙,注意命令中要修改自己的网卡名称ens33

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

执行一下的命令设置 keepalived 为随服务器自启动
重新加载

systemctl daemon-reload

设置开机自动启动

systemctl enable keepalived.service

查看两台vip配置情况, 若两台主机只有一个VIP,则配置正常

ip addr

至此,MySQL HA 配置完成

Original: https://www.cnblogs.com/cheng9999/p/16500925.html
Author: cheng_blog
Title: MySQL高可用安装

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621014/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 从外包到互联网,加油,打工人!

    以下从公众号@BiggerBoy同步 Hello,大家好,我是walking。很久没有更新了,十分抱歉。 因为前几个月在忙两个事情,一个是练车考驾照,一个是准备面试,所以就没有时间…

    数据库 2023年6月11日
    068
  • 手把手教你分析MySQL查询性能瓶颈,包教包会

    当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪? 我们一般会使用 Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引? 但执行计划显示内容不…

    数据库 2023年5月24日
    084
  • MySQL锁(乐观锁、悲观锁、多粒度锁)

    锁 并发事务可能会发生什么情况: [En] What may happen to concurrent transactions: 读-读事务并发:此时是没有问题的,读操作不会对记…

    数据库 2023年5月24日
    0101
  • [LeetCode]剑指 Offer 17. 打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n = 1输出: [1,2,3…

    数据库 2023年6月9日
    096
  • 3 访问修饰符public,private,protected以及不写(默认)时的区别

    private 私有的,只对本类公开。 default 类的成员不写访问修饰符时默认为default,默认对于同一个包中的其它类相当于公开(public),对于不是同一个包中的其它…

    数据库 2023年6月6日
    0101
  • MYSQL的Java操作器——JDBC

    在学习了Mysql之后,我们就要把Mysql和我们之前所学习的Java所结合起来 而JDBC就是这样一种工具:帮助我们使用Java语言来操作Mysql数据库 JDBC简介 首先我们…

    数据库 2023年6月14日
    085
  • k8s vs k3s: 差异解析

    2. K3s的优势 小型 K3s 的最大优势是它的尺寸最小(小于 100 MB),这有助于它以最少的设置在小型硬件中启动 Kubernetes 集群。 快速部署 curl -sfL…

    数据库 2023年6月14日
    0110
  • MySQL的Explain总结

    Explain简介 MySQL优化器在基于成本的计算和基于规则的SQL优化会生成一个所谓的 执行计划,我们就可以使用执行计划查看MySQL对该语句具体的执行方式。 介绍这个好啰嗦就…

    数据库 2023年5月24日
    082
  • 【StoneDB】从库如何规避不支持的DML和DDL

    (以下情况仅针对StoneDB 1.0版本不支持的部分DML和DDL操作,StoneDB 2.0及以上版本将无需此类操作)在主从复制中,主库的任何更新都将同步到从库。如果从库不想重…

    数据库 2023年5月24日
    099
  • Tomcat的关于Web应用的类加载器

    类加载器的补充 一 类加载器的结构 二 类加载器的源码 源码视频 ClassLoader: 类加载器的基础实现,双亲委派就是这里实现的 SecureClassLoader: 安全相…

    数据库 2023年6月11日
    079
  • Redis学习

    Redis 因为没有指定配置文件 需配置 redis-server redis.windows.conf 之后自动启动 测试性能 redis-benchmark -p 6379 -…

    数据库 2023年6月16日
    080
  • SpringBoot 集成 JSP

    导致我写这个博客的原因是 在SpringBoot支持的模板引擎thymeleaf 下 前台页面仅支持HTML 可能用一些其他的前端框架 1、我们首先在IDEA中搭建一个项目,搭建项…

    数据库 2023年6月9日
    0140
  • 边缘计算 | 在移动设备上部署深度学习模型的思路与注意点 ⛵

    💡 作者:韩信子@ShowMeAI📘 深度学习◉技能提升系列:https://www.showmeai.tech/tutorials/35📘 深度学习实战系列:https://ww…

    数据库 2023年6月14日
    0117
  • 千万级别的表分页查询非常慢,怎么办?

    一、问题复现 在实际的软件系统开发过程中,随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大。 以订单表为例,假如每天的订单量在 4 万左右,那么一个月的…

    数据库 2023年6月14日
    096
  • Eureka详解系列(二)–如何使用Eureka(原生API,无Spring)

    简介 通过上一篇博客 Eureka详解系列(一)–先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka。 在…

    数据库 2023年6月6日
    0118
  • 数据连接池

    dbcp 1.引入jar包 导入这两个jar包 下载jar包地址:Maven Repository: Search/Browse/Explore (mvnrepository.co…

    数据库 2023年5月24日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球