【ubuntu22.04~mysql-MHA-mycat】
ubuntu22.04~mysql-MHA-mycat
- 前言
- 一、安装指定版本mysql-server(8.0.23)
- 1、安装mysql
- 2、启用修改mysql配置
- 1、安装
- 3、修改权限
- 3.1、用户密码存放位置,
- 3.2、创建用户root@%
- 4、mysql配置文件my.cnf修改
- 1、主节点my.cnf
- 2、slave1~my.cnf修改项
- 3、slave2~my.cnf修改项
- 5、重启mysql,创建replica_user,设置主从
- 二、MHA部署安装
- 1、安装mha
- 2、所有mysql服务器,创建mha用户
- 1227报错
- 3、创建配置文件
- db3作为mha主节点
- 4、 check_repl报错修改该manager主机文件
- 5、mha_scripts
- 1、master_ip_failover 自动切换VIP管理脚本
- 2、master_ip_online_change 在线切换VIP管理
- 3、power_manager 故障发生后关闭主机的脚本
- 4、send_report 因故障切换后发送报警的脚本
- 6、check ssh及repl
- 7、运行启停mha
- 8、实验
- 9、恢复mha状态三节点
- 1、原主节点change master恢复主从
- 2、原 主节点执行change master
- 3、修改mha配置
- 三、mysqlrouter读写分离搭建
- 四、mycat读写分离
- 1、解压,修改数据源
- 2、 修改集群主副节点
- 3、修改mycat登录密码为:
- 4、修改服务器server配置
- 5、启动mycat
- 6、查看mycat日志
- 7、mycat实用命令
- 五.canal部署
- 1、创建用户canal
- 2、查看mysql配置文件
- 3、下载解压,改配置
- 六、题外话Mysqlslap、Sysbench压力测试
- 1、mysqlslap 是 MySQL 自带的压力测试工具,能够模拟多种查询模式,对数据库性能进行评估。
- 2、指定 SQL 脚本测试
- a、sysbench压力测试
- b、执行测试
- c、清理测试数据
- 七、主从同步报错
- 1、找到问题执行语句
- 2、跳过
- 3、重新change master
- 4、手动备份同步
- 八、xbk备份
- 1、安装
- 2、常用参数
- 3、全量备份恢复
前言
##三台服务器之间相互免密
ssh-key-gen -t rsa -b 2048
ssh-copy-id
192.168.220.66 db-master1
192.168.220.77 db-slave1
192.168.220.99 db-slave2
一、安装指定版本mysql-server(8.0.23)
mysql官网
1、安装mysql
wget https://dev.mysql.com/get/mysql-apt-config_0.8.23-1_all.debdpkg -i mysql-apt-config_0.8.23-1_all.deb apt-get update ##报错Err:1 http://repo.mysql.com/apt/ubuntu jammy InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C
##解决报错--recv-keys 后加报错NO_PUBKEY的值
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785Capt-get install mysql-server
##可以看下想要的配置,如果没有点ok就可以。

2、启用修改mysql配置
1、安装
root@db1:/etc/mysql# mysql_secure_installation mysql_secure_installation: [ERROR] unknown variable 'default-character-set=utf8mb4'.
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y ##是否启用密码组件
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 ##密码策略,线下环境选了0
Skipping password set for root as authentication with auth_socket is used by default.
If you would like to use password authentication instead, this can be done with the "ALTER_USER" command.
See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y ##是否删除匿名用户
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n ##是否禁止rootu远程登录
... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y ##是否删除测试库并访问
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y ##重新加载权限
Success.
All done!
3、修改权限
3.1、用户密码存放位置,
cat /etc/mysql/debian.cnf
3.2、创建用户root@%
## 主库#更改root权限,并修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Qwer1234';
update mysql.user set host = '%' where user = 'root';
4、mysql配置文件my.cnf修改
1、主节点my.cnf
# MySQL 8.0.23 Configuration File[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
bind-address= 0.0.0.0
mysqlx-bind-address= 0.0.0.0
key_buffer_size= 16M
myisam-recover-options = BACKUP
skip-name-resolve
sync_binlog=0# 设置服务器字符集
character-set-server=utf8mb4# 设置MySQL数据存储目录
datadir=/var/lib/mysql# 设置MySQL套接字文件路径
socket=/var/run/mysqld/mysqld.sock# 设置MySQL服务器ID
server-id=66# 启用二进制日志记录
log-bin=mysql-bin-master
log-bin-index=mysql-bin-master.index# 二进制日志格式
binlog-format=row
max_binlog_size = 100M
# 写在主库配置文件里参数(对所有从库都有效)
#binlog_do_db=库名列表 //允许同步的库
#binlog_ignore_db=库名列表 //不允许同步的库# 开启GTID功能
#gtid-mode=ON
#enforce-gtid-consistency=ON# 设置日志输出格式为JSON
log-output=TABLE# 设置MySQL错误日志路径
log-error=/var/log/mysql/error.log# 设置慢查询日志
slow-query-log=1
slow-query-log-file=/var/log/mysql/slow.log
long_query_time=10# 设置innodb_buffer_pool_size为服务器总内存的70%
innodb_buffer_pool_size=12G# 设置innodb_log_file_size为4GB
innodb_log_file_size=4G# 设置innodb_flush_log_at_trx_commit为1,同步刷新日志
innodb_flush_log_at_trx_commit=0# 设置innodb_flush_method为O_DIRECT,直接写入磁盘
innodb_flush_method=O_DIRECT# 设置innodb_file_per_table为ON,每个表独立存储表空间
innodb_file_per_table=ON# 设置innodb_autoinc_lock_mode为2,自增锁定模式为interleaved
innodb_autoinc_lock_mode=2#innodb_large_prefix = ON
#innodb_log_files_in_group = 3
#innodb_open_files = 4000
#innodb_read_io_threads = 8
#innodb_write_io_threads = 8
#innodb_thread_concurrency = 8
#innodb_io_capacity = 2000
#innodb_io_capacity_max = 6000
#innodb_lru_scan_depth = 2000
#innodb_max_dirty_pages_pct = 85# 设置max_connections为2000,最大连接数
max_connections=2000# 设置interactive_timeout和wait_timeout为600s
interactive_timeout=600
wait_timeout=600# 关闭ONLY_FULL_GROUP_BY,允许SELECT列表中的非聚合列不在GROUP BY子句中
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION# 关闭SQL中的大小写敏感
#lower_case_table_names=1# 设置MySQL端口号
port=3306# 设置最大包大小
max_allowed_packet=512M# 设置字符集
collation-server=utf8mb4_unicode_ci# 设置日志输出格式为表格
log-output=TABLE# 设置跟踪日志文件大小
log-raw=/var/log/mysql/raw.log# 设置跟踪日志的错误
log-tc=tc.log# 设置跟踪日志
log-slow-admin-statements=ON# 设置中继日志路径
relay-log=/var/lib/mysql/relay-bin-master
relay-log-index=/var/lib/mysql/relay-bin-master.index
relay-log-purge = 0 # 禁用或启用不再需要中继日志时是否自动清空它们#[mysqldump]
#quick
#quote-names
#max_allowed_packet = 16M
#[isamchk]
#key_buffer = 128M
#sort_buffer_size = 4M
#read_buffer = 2M
#write_buffer = 2M#[myisamchk]
#key_buffer = 128M
#sort_buffer_size = 4M
#read_buffer = 2M
#write_buffer = 2M!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
2、slave1~my.cnf修改项
# 设置MySQL服务器ID
server-id=77# 启用二进制日志记录
log-bin=mysql-bin-slave1
log-bin-index=mysql-bin-slave1.index#记录从库更新,允许链式复制(A-B-C)
#log_slave_updates#写在从库配置文件里参数(只针对从库本机有效)默认全部复制。
#replicate_do_db=库名列表 //指定只同步的库
#replicate_ignore_db=库名列表 //指定不同步的库# 设置中继日志路径
relay-log=/var/lib/mysql/relay-bin-slave1
relay-log-index=/var/lib/mysql/relay-bin-slave1.index
relay-log-purge = 0 # 禁用或启用不再需要中继日志时是否自动清空它们
read_only = 1
3、slave2~my.cnf修改项
# 设置MySQL服务器ID
server-id=99# 启用二进制日志记录
log-bin=mysql-bin-slave2
log-bin-index=mysql-bin-slave2.index# 设置中继日志路径
relay-log=/var/lib/mysql/relay-bin-slave2
relay-log-index=/var/lib/mysql/relay-bin-slave2.index
relay-log-purge = 0 # 禁用或启用不再需要中继日志时是否自动清空它们
read_only = 1
5、重启mysql,创建replica_user,设置主从
#密码策略设置(线下测试环境)
show variables like '%pass%';
set global validate_password.policy="LOW";# 创建用户
create user 'slave'@'%' identified with mysql_native_password by 'Qwer1234';# 授权
grant replication slave on *.* to 'slave'@'%';
flush privileges;show master status;change master to master_host='192.168.220.66',master_port=3306,master_user='slave',master_password='Qwer1234',master_log_file='mysql-bin-master.000004',master_log_pos=1322;show master status;
flush privileges;
##设置只读节点
mysql> set global interactive_timeout=31536000;mysql> set global wait_timeout=31536000;mysql> set global read_only=1;

# 开始同步
start slave;# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;# 查询Slave状态
show slave status\G# 查看是否配置成功
# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。# 在主数据库创建数据库test
create database test;# 从数据库查看
show databases;# 在主数据库创建表
use test;
create table t_user(id int, name varchar(20));# 插入数据
insert into t_user values(1, 'C3Stones');# 在从数据库查看
use test;
select * from t_user;
二、MHA部署安装
mha_manager_github源代码及安装包等下载
mha_node_github源代码及安装包等下载
1、安装mha
ubuntu安装软件最便捷的是当你安装一个包缺少依赖时,只需要一条命令就可以解决:
##全部节点安装manager,安装manager后自带node
##或全部节点安装node,单节点安装manager
dpkg -i mha4mysql-manager_0.58-0_all.deb
dpkg -i mha4mysql-node_0.58-0_all.debapt install -f
##创建虚拟ip需要用到ifconfig命令
apt install net-tools

2、所有mysql服务器,创建mha用户
#密码策略设置(线下测试环境)
show variables like '%pass%';
set global validate_password.policy="LOW";#创建用户
create user 'mha'@'%' identified by 'Qwer1234';
grant all privileges on *.* to 'mha'@'%';
flush privileges;
1227报错
Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
##授权grant system_user on *.* to 'root';
3、创建配置文件
db3作为mha主节点
##可以多集群搭建
mkdir -p /etc/mha/ && cd /etc/mha/ vim app1.conf[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/var/lib/mysql
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_changeuser=mha
password=Qwer1234
ping_interval=1
remote_workdir=/tmp
repl_user=mha
repl_password=Qwer1234
ssh_user=root[server01]
hostname=192.168.220.66
port=3306[server02]
hostname=192.168.220.77
port=3306
candidate_master=1
check_repl_delay=1[server03]
hostname=192.168.220.99
port=3306
4、 check_repl报错修改该manager主机文件
vim /usr/share/perl5/MHA/NodeUtil.pmsub parse_mysql_major_version($) {my $str = shift;my $result = sprintf( '%03d%03d', $str =~ m/(\d+)/g );return $result;
}改为sub parse_mysql_major_version($) {my $str = shift;$str =~ /(\d+)\.(\d+)/;my $strmajor = "$1.$2";my $result = sprintf( '%03d%03d', $strmajor =~ m/(\d+)/g );return $result;
}
5、mha_scripts
相关文章:
【ubuntu22.04~mysql-MHA-mycat】
ubuntu22.04~mysql-MHA-mycat 前言一、安装指定版本mysql-server(8.0.23)1、安装mysql2、启用修改mysql配置1、安装3、修改权限3.1、用户密码存放位置,3.2、创建用户root@%4、mysql配置文件my.cnf修改1、主节点my.cnf2、slave1~my.cnf修改项3、slave2~my.cnf修改项5、重启mys…...
Java Reflection 反射使用 完全指南
前言 Java 中的反射大家都不陌生,有很多很好的文章都进行了讲解,但是很难找到一篇文章能完全解释反射的所有用法,特别是反射获取这个对象的注解的信息和泛型信息,往往都停留在了获取类的函数、方法,构造上。所以这篇文…...
2024年适合学生写作业的台灯推荐:五款公认好用的护眼台灯
儿童的视力健康是每一个家庭都极为关注的问题。目前中国近视率居高不下,且呈现出年轻化、低龄化的趋势。儿童近视的问题愈发严重,如何才能让孩子在学习的同时,眼睛也能得到充分的保护?答案就是护眼台灯。护眼台灯通常拥有柔和的光…...
电商平台API电商平台数据传输(商品订单店铺数据采集)
API(Application Programming Interface)是一种用于应用程序之间相互通信和交互的接口。它定义了一组规范和协议,允许软件系统之间传递数据和请求服务。 API的基本概念包括: 1. 接口:API作为接口,提供了一…...
【LeetCode每日一题】3067. 在带权树网络中统计可连接服务器对数目-DFS和图
Hey我的编程小伙伴们👋,今天我要和大家分享一道我在LeetCode上遇到的超有趣的题目——编号3067的在带权树网络中统计可连接服务器对数目。这是一道非常适合练习DFS和图的题目哦!🤓💻 邻接图是什么? 在我们…...
java中的时间相关类
LocalDate: 用于表示日期。 public final class LocalDate {private final int year;private final int month;private final int day;}LocalTime: 用于表示时间。 public final class LocalTime {private final byte hour;private final byte minute;private final byte se…...
大模型的现状与未来:探索腾讯元宝APP及其他AIGC产品
前言 随着近日腾讯元宝APP的正式上线,国内大模型产品又添一员。近年来,随着人工智能技术的快速发展,AIGC(AI生成内容)产品逐渐成为技术与商业应用的热点。各大互联网厂商纷纷推出自己的大模型产品,以期在这…...
记录一个apisix修改后台接口超时时间的方法
垃圾程序猿搞了个数据导入,解析校验比较复杂,1000条就要70秒。apisix默认60s超时,导致提交导入功能总是失败。 非要先调整超时时间。这里记录一下 到服务器配置yaml如下: apiVersion: apisix.apache.org/v2 kind: ApisixUpstrea…...
地产样板间vr全景云展平台降低售房压力
在数字化浪潮的推动下,传统的实体展厅正面临着巨大的转型压力。高昂的搭建、物流、安保成本,以及展览的周期性和资源浪费,都成为了展商们不得不面对的难题。然而,现在有了商品3D线上展台搭建编辑器,这些问题都迎刃而解…...
性能测试2【搬代码】
1.性能测试脚本完善以及增强 2.jmeter插件安装以及监控使用 3.性能压测场景设置(基准、负载、压力、稳定性) 4. 无界面压测场景详解 一、性能测试脚本完善以及增强 使用控制器的目的是使我们的脚本更加接近真实的场景 1.逻辑控制器: 【事务控制器】&…...
Chromium源码阅读:深入理解Mojo框架的设计思想,并掌握其基本用法(1)
Mojo简介 Mojo 是一个运行时库的集合,提供与平台无关的通用 IPC 原语抽象、消息 IDL 格式以及具有针对多种目标语言的代码生成的绑定库,以便于跨任意进程间和进程内边界传递消息。 Mojo 分为清晰分离的层,子组件的基本层次结构如下ÿ…...
通用大模型VS垂直大模型对比
通用大模型和垂直大模型的区分主要在于它们的设计目的、应用范围、训练数据、优化目标和使用场景。以下是一些关键点,用以区分这两种模型: 设计目的: 通用大模型:设计用于处理多种类型的任务,不特定于某一领域。垂直大…...
时尚解决方案来袭:几分钟即可生成高清商拍大片
在时尚行业,视觉展示的重要性不可小觑。商品图片不仅代表品牌的风格调性,而且直接影响消费者的购买行为。可以说,视觉营销在服装行业中的地位至关重要。 尽管如此,视觉营销的传统产出渠道——商业摄影,因其高成本、复杂…...
【每日一练】day1
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈 ✨✨ 帅哥美女们,我们共同加油!一起…...
GA/T 1400 (非标)视图库网关
GA/T 1400 (非标)视图库网关 应用概述: GAT1400视图库网关产品是公司“分布式综合安防管理平台”下的子系统 针对以下遇到应用场景定制开发、优化后形成的网关产品,具备兼容性高、可扩展、可功能定制、可OEM等优点。 视图库网关…...
QT安装及项目创建
一、QT安装 1、安装qt_creater 方法一: 镜像文件:在2024-6-12:版本已经更新到了6.7 下载地址:https://download.qt.io/archive/qt/ 方法二: 百度网盘:链接:https://pan.baidu.com/s/1D0EmH…...
15. STUN协议和ICE工作原理
NET介绍 NAT是一种地址转换技术,它可以将IP数据报文头中的IP地址转换为另一个IP地址,并通过转换端口号达到地址重用的目的。 在大多数网络环境中,我们都需要通过 NAT 来访问 Internet。 NAT作为一种缓解IPv4公网地址枯竭的过渡技术ÿ…...
JVM (一)内存模型
一。内存结构 1,JVM内存结构 堆内存:是JVM中最大的一块,由新生代和老年代组成。默认情况下新生代按照8:1:1的比例来分配; 方法区:存储类信息、常量、静态变量等数据,是线程共享的区域; 栈&#…...
Web前端职业描述:编织数字世界的绚丽画卷
Web前端职业描述:编织数字世界的绚丽画卷 在数字化浪潮席卷而来的今天,Web前端职业日益成为技术领域的璀璨明星。他们不仅是数字世界的建筑师,更是用户体验的缔造者。那么,Web前端职业究竟是怎样的呢?接下来ÿ…...
负氧离子监测站:打造健康生态的守护者
TH-FZ5随着人们对生活质量和健康水平的要求日益提高,空气质量成为了公众关注的焦点。其中,负氧离子作为空气中的一种重要成分,对人体健康有着显著的影响。负氧离子监测站作为监测空气中负氧离子浓度的专业设备,在现代环境监测和生…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
