MySQL源码编译部署主从及MHA高可用集群实战

news2026/3/31 0:36:45
一.Mysql的源码编译1.下载安装包wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.3.0.tar.gz2.源码编译# 安装编译依赖的软件包包括C/C编译器(如gcc/gcc-c)、构建工具(如cmake, git, bison)和开发库(如openssl-devel, ncurses-devel) [rootmysql-node1 ~]# dnf install cmake3 gcc git bison openssl-devel ncurses-devel systemd-devel rpcgen.x86_64 libtirpc-devel-1.3.3-9.el9.x86_64.rpm gcc-toolset-12-gcc gcc-toolset-12-gcc-c gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc -y # 解压下载的MySQL源码压缩包 [rootmysql-node1 ~]# tar zxf mysql-boost-8.3.0.tar.gz # 进入解压后的源码目录并创建独立的编译构建目录 [rootmysql-node1 mysql-8.3.0]# mkdir build [rootmysql-node1 mysql-8.3.0]# cd build/ # 使用CMake配置MySQL的编译选项例如指定安装路径、数据目录、字符集、存储引擎等 [rootmysql-node1 build]# cmake3 .. -DCMAKE_INSTALL_PREFIX/usr/local/mysql -DMYSQL_DATADIR/data/mysql -DMYSQL_UNIX_ADDR/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE1 -DWITH_EXTRA_CHARSETSall -DDEFAULT_CHARSETutf8mb4 -DDEFAULT_COLLATIONutf8mb4_unicode_ci -DWITH_BOOSTbundled -DWITH_SSLsystem -DWITH_DEBUGOFF # 执行编译此过程耗时较长 [rootmysql-node1 build]# make3.部署mysql# 将编译好的MySQL二进制文件、库和脚本等安装到指定的/usr/local/mysql目录 [rootmysql-node1 build]# make install [rootmysql-node1 build]# cd /usr/local/mysql/ # 编辑当前用户的bash配置文件将MySQL的可执行文件路径添加到系统环境变量PATH中 [rootmysql-node1 mysql]# vim ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs export PATH$PATH:/usr/local/mysql/bin #设置mysql运行环境的环境变量 # 使环境变量配置立即生效 [rootmysql-node1 mysql]# source ~/.bash_profile # 创建一个名为mysql的系统用户用于运行MySQL服务进程 [rootmysql-node1 mysql]# useradd -r -s /sbin/nologin -M mysql # 创建MySQL的数据存储目录并将其所有者改为mysql用户 [rootmysql-node1 mysql]# mkdir -p /data/mysql [rootmysql-node1 mysql]# chown mysql.mysql /data/mysql/ # 创建并编辑MySQL的主配置文件设置数据目录和socket文件路径 [rootmysql-node1 ~]# vim /etc/my.cnf [mysqld] datadir/data/mysql socket/data/mysql/mysql.sock4.mysql数据结构初始化# 初始化MySQL数据目录创建系统数据库如mysql, sys等和表此步骤会生成root用户的初始随机密码 [rootmysql-node1 ~]# mysqld --initialize --usermysql5.启动mysql# 安装MySQL服务启动脚本所需的基础依赖包 [rootmysql-node1 support-files]# dnf install initscripts-10.11.8-4.el9.x86_64 -y # 将MySQL自带的启动脚本复制到系统的init.d目录以支持service/chkconfig命令管理 [rootmysql-node1 support-files]# cd /usr/local/mysql/support-files/ [rootmysql-node1 support-files]# cp -p mysql.server /etc/init.d/mysqld # 启动MySQL服务 [rootmysql-node1 support-files]# /etc/init.d/mysqld start Starting MySQL.Logging to /data/mysql/mysql-node1.err. . SUCCESS! # 设置MySQL服务在运行级别3和5下开机自动启动 [rootmysql-node1 support-files]# chkconfig --level 35 mysqld on6.mysql的安全初始化# 运行安全增强脚本以交互式方式设置root密码、移除匿名用户、禁止root远程登录、移除测试数据库等 [rootmysql-node1 ~]# mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: The existing password for the user account root has expired. Please set a new password. New password: Re-enter new 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: no Using existing password for root. Change the password for root ? ((Press y|Y for Yes, any other key for No) : no 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) : y Success. 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!二.Mysql集群实战--主从复制1.编写my.cnf 主配置文件# 在主服务器mysql-node1上编辑配置文件设置server-id为10并开启二进制日志 [rootmysql-node1 ~]# vim /etc/my.cnf [mysqld] datadir/data/mysql socket/data/mysql/mysql.sock symbolic-links0 server-id10 log-binmysql-bin # 在第一个从服务器mysql-node2上编辑配置文件设置唯一的server-id为20并开启二进制日志 [rootmysql-node2 ~]# vim /etc/my.cnf [mysqld] datadir/data/mysql socket/data/mysql/mysql.sock symbolic-links0 server-id20 log-binmysql-bin # 在第二个从服务器mysql-node3上编辑配置文件设置唯一的server-id为30并开启二进制日志 [rootmysql-node3 ~]# vim /etc/my.cnf [mysqld] datadir/data/mysql socket/data/mysql/mysql.sock symbolic-links0 server-id30 log-binmysql-bin # 在三台主机上重启MySQL服务以使新的配置文件生效 [rootmysql-node1~3 ~]# /etc/init.d/mysqld restart2.建立同步时需要用到的数据库账号# 在主服务器上登录MySQL查看默认身份验证插件 [rootmysql-node1 ~]# mysql -uroot -ptest ... mysql SHOW VARIABLES LIKE default_authentication_plugin; ------------------------------------------------------ | Variable_name | Value | ------------------------------------------------------ | default_authentication_plugin | caching_sha2_password | ------------------------------------------------------ 1 row in set (0.00 sec) # 创建一个名为‘test’的用户使用mysql_native_password插件进行身份验证以便于主从复制 mysql create user test% identified with mysql_native_password by test; #建立用户 Query OK, 0 rows affected (0.04 sec) mysql select User from mysql.user; ------------------ | User | ------------------ | test | | mysql.infoschema | | mysql.session | | mysql.sys | | root | ------------------ 5 rows in set (0.00 sec) # 授予‘test’用户复制相关的权限 mysql GRANT replication slave ON *.* to test%; #给用户授权 Query OK, 0 rows affected (0.00 sec) mysql SHOW GRANTS FOR test%; --------------------------------------------- | Grants for test% | --------------------------------------------- | GRANT REPLICATION SLAVE ON *.* TO test%| --------------------------------------------- 1 row in set (0.00 sec) # 在从服务器上测试使用新创建的‘test’用户能否成功连接到主服务器 [rootmysql-node2 ~]# mysql -utest -ptest -h172.25.254.10 ... mysql quit3.配置数据库一主一从#在主服务器上查看当前的二进制日志文件状态记录文件名File和位置Position供从服务器连接时使用 mysql SHOW MASTER STATUS; ------------------------------------------------------------------------------- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | ------------------------------------------------------------------------------- | mysql-bin.000001 | 659 | | | | ------------------------------------------------------------------------------- # 在第一个从服务器mysql-node2上配置主从复制 [rootmysql-node2 ~]# mysql -uroot -ptest ... # 执行CHANGE MASTER TO命令指定主服务器的IP、用户、密码以及要开始复制的二进制日志位置 mysql CHANGE MASTER TO MASTER_HOST172.25.254.10,MASTER_USERtest,MASTER_PASSWORDtest,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS659; Query OK, 0 rows affected, 8 warnings (0.03 sec) # 启动从服务器上的复制线程 mysql start slave; Query OK, 0 rows affected, 1 warning (0.03 sec) # 查看从服务器的复制状态 mysql show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for source to send event Master_Host: 172.25.254.10 Master_User: test Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 659 Relay_Log_File: mysql-node2-relay-bin.000002 Relay_Log_Pos: 328 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes #I/O线程运行中表示正在从主服务器接收二进制日志 Slave_SQL_Running: Yes #SQL线程运行中表示正在执行中继日志中的事件4.测试# 在主服务器上创建一个新的数据库test [rootmysql-node1 ~]# mysql -uroot -ptest mysql show databases; ... mysql create database test; Query OK, 1 row affected (0.00 sec) mysql SHOW DATABASES; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | | test | -------------------- 5 rows in set (0.00 sec) # 在从服务器上检查是否已同步创建了test数据库 [rootmysql-node2 ~]# mysql -uroot -ptest mysql show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | | test | -------------------- 5 rows in set (0.00 sec)5.向当前一主一从中加入新的数据库# 在主服务器上模拟在主从复制已运行一段时间后在主库创建一个表并插入数据 [rootmysql-node1 ~]# mysql -uroot -ptest mysql CREATE TABLE test.userlist ( - name VARCHAR(10) not null, - pass VARCHAR(50) not null - ); Query OK, 0 rows affected (0.01 sec) mysql INSERT INTO test.userlist values (user1,123); Query OK, 1 row affected (0.00 sec) mysql SELECT * FROM test.userlist; ------------- | name | pass | ------------- | user1 | 123 | ------------- 1 row in set (0.01 sec) # 准备将新的从服务器mysql-node3加入集群需要先手动同步现有数据 # 使用mysqldump导出主服务器上test数据库的数据 [rootmysql-node1 ~]# mysqldump -uroot -p test test.sql # 将导出的数据文件传输到新的从服务器 [rootmysql-node1 ~]# scp test.sql root172.25.254.30:/root/ # 在新的从服务器上先创建同名数据库然后导入数据 [rootmysql-node3 ~]# mysql -uroot -ptest -e create database test; [rootmysql-node3 ~]# mysql -uroot -ptest test test.sql # 验证数据已成功导入新的从服务器 [rootmysql-node3 ~]# mysql -uroot -ptest mysql select * from test.userlist; ------------- | name | pass | ------------- | user1 | 123 | ------------- 1 row in set (0.00 sec)6.将新库加入主从结构中# 在主服务器上再次查看当前二进制日志位置作为新从服务器开始复制的起点 mysql SHOW MASTER STATUS; ------------------------------------------------------------------------------- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | ------------------------------------------------------------------------------- | mysql-bin.000001 | 1415 | | | | ------------------------------------------------------------------------------- # 在新的从服务器mysql-node3上配置主从复制使用上面查询到的日志文件和位置 [rootmysql-node3 ~]# mysql -uroot -ptest mysql CHANGE MASTER TO MASTER_HOST172.25.254.10,MASTER_USERtest,MASTER_PASSWORDtest,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS1415; mysql start slave; Query OK, 0 rows affected, 1 warning (0.04 sec) # 验证新从服务器的复制状态 mysql show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for source to send event Master_Host: 172.25.254.10 Master_User: test Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 1415 Relay_Log_File: mysql-node3-relay-bin.000002 Relay_Log_Pos: 328 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes7.测试一主两从# 在主服务器上插入新的数据 mysql INSERT INTO timinglee.userlist values (user2,123); # 在**新的**从服务器上查看数据确认复制成功 mysql select * from timinglee.userlist; ------------- | name | pass | ------------- | user1 | 123 | | user2 | 123 | ------------- 2 rows in set (0.00 sec)三.MySQL MHA 高可用集群环境配置与操作1.MySQL-MHA 高可用集群环境配置准备工作 - 保证数据一致性所有MySQL节点此步骤的目的是清空现有数据并重新初始化一个全新的、数据同步的主从复制环境为MHA的搭建准备干净的环境。# 在主节点(mysql-node1)上停止MySQL服务清空数据目录并重新初始化数据库 [rootmysql-node1 ~]# /etc/init.d/mysqld stop [rootmysql-node1 ~]# rm -fr /data/mysql/* [rootmysql-node1 ~]# mysqld --initialize --user mysql # 启动MySQL服务并运行安全初始化向导 [rootmysql-node1 ~]# /etc/init.d/mysqld start Starting MySQL.Logging to /data/mysql/mysql-node1.err. SUCCESS! [rootmysql-node1 ~]# mysql_secure_installation # 创建用于主从复制的专用用户test [rootmysql-node1 ~]# mysql -uroot -ptest -e create user test% identified with mysql_native_password by test; # 授予该用户复制权限 [rootmysql-node1 ~]# mysql -uroot -ptest -e GRANT replication slave ON *.* to test%; # 查看主库状态记录File和Position或GTID用于配置从库 [rootmysql-node1 ~]# mysql -uroot -ptest -e show master status; # 在从库节点mysql-node2, mysql-node3上配置主从复制 # 指向主库IP (172.25.254.10)并使用上面创建的复制用户 [rootmysql-node2~3 ~]# mysql -uroot -ptest -e CHANGE MASTER TO MASTER_HOST172.25.254.10, MASTER_USERtest, MASTER_PASSWORDtest, MASTER_AUTO_POSITION1; # 启动从库复制线程 [rootmysql-node2~3 ~]# mysql -uroot -ptest -e start slave; # 检查从库复制状态 [rootmysql-node2~3 ~]# mysql -uroot -ptest -e show slave status\G;1.1 在所有主机中安装MHA相应软件在MHA管理节点(mha)上安装MHA Manager和Node软件包并在所有MySQL节点上安装Node软件包。Manager负责监控和故障转移Node运行在每个MySQL服务器上用于状态上报和指令执行。# 在MHA管理节点上解压软件包并安装Perl依赖 [rootmha ~]# unzip MHA-7.zip [rootmha ~]# cd MHA-7/ [rootmha MHA-7]# dnf install perl perl-DBD-MySQL perl-CPAN -y # 进入CPAN交互式环境安装MHA所需的Perl模块 [rootmha MHA-7]# cpan cpan[1] install Config::Tiny cpan[2] install Log::Dispatch cpan[3] install Mail::Sender cpan[4] install Parallel::ForkManager cpan[5] exit # 验证Perl模块是否安装成功 [rootmha ~]# perl -MConfig::Tiny -e print OK\n [rootmha ~]# perl -MLog::Dispatch -e print OK\n [rootmha ~]# perl -MMail::Sender -e print OK\n [rootmha ~]# perl -MParallel::ForkManager -e print OK\n # 在MHA管理节点上安装Manager和Node的RPM包 [rootmha MHA-7]# rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha4mysql-node-0.58-0.el7.centos.noarch.rpm --nodeps # 在所有MySQL节点上仅安装Node的RPM包 [rootmha MHA-7]# rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm --nodeps1.2 在所有MySQL节点从库中分发并安装Node软件从MHA管理节点将Node软件包远程复制到各个MySQL节点并安装实现批量部署。# 通过循环将Node包scp到各个MySQL节点172.25.254.10, .20, .30并远程执行安装 [rootmha MHA-7]# for i in 10 20 30 do scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root172.25.254.$i:/mnt ssh -l root 172.25.254.$i rpm -ivh /mnt/mha4mysql-node-0.58-0.el7.centos.noarch.rpm --nodeps done1.3 修改MHA-Manager中的检测代码注释: 修改Perl模块文件以适配特定MySQL版本格式解决可能出现的版本解析问题。[rootmha MHA-7]# vim /usr/share/perl5/vendor_perl/MHA/NodeUtil.pm # 找到并修改 parse_mysql_major_version 函数确保版本号解析正确 # 原始代码 (第199-203行) 被注释或修改 # 修改后的函数如下 sub parse_mysql_major_version($) { my $str shift; my nums $str ~ m/(\d)/g; my $result sprintf( %03d%03d, $nums[0]//0, $nums[1]//0); return $result; }1.4 为MHA建立远程登录用户在Master数据库上创建一个具有完全权限的root用户允许任意主机连接供MHA Manager在故障切换时管理数据库。# 在主库172.25.254.10的MySQL中执行 mysql create user root% identified with mysql_native_password by test; mysql GRANT ALL ON *.* TO root% ;5. 生成MHA-manager的配置文件模板创建MHA的配置文件目录并将示例配置文件合并生成一个默认的配置文件模板。[rootmha mha4mysql-manager-0.58]# mkdir /etc/masterha/ -p [rootmha MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz [rootmha MHA-7]# cd mha4mysql-manager-0.58 [rootmha mha4mysql-manager-0.58]# cat samples/conf/masterha_default.cnf samples/conf/app1.cnf /etc/masterha/app1.cnf6. 修改配置文件编辑生成的配置文件定义集群名称、数据库访问凭据、服务器列表、角色和监控参数。[rootmha mha4mysql-manager-0.58]# vim /etc/masterha/app1.cnf # 配置文件内容如下 [server default] userroot # MySQL管理用户 passwordtest # 对应用户密码 ssh_userroot # SSH登录用户用于节点间通信 repl_usertest # 主从复制用户 repl_passwordtest # 主从复制用户密码 master_binlog_dir /data/mysql # Master的binlog目录 remote_workdir/tmp # 远程节点工作目录 secondary_check_script masterha_secondary_check -s 172.25.254.10 -s 172.25.254.20 # 二次检查脚本 ping_interval3 # ping检测间隔秒 # 以下为可选的脚本配置用于VIP漂移、关机、报告等此处被注释 # master_ip_failover_script /script/masterha/master_ip_failover # shutdown_script /script/masterha/power_manager # report_script /script/masterha/send_report # master_ip_online_change_script /script/masterha/master_ip_online_change manager_workdir/etc/masterha # Manager工作目录 manager_log/etc/masterha/mha.log # Manager日志文件 # 定义集群中的MySQL服务器 [server1] hostname172.25.254.10 # 主库IP candidate_master1 # 是候选主库故障时可提升为主 check_repl_delay0 # 忽略复制延迟检查 [server2] hostname172.25.254.20 # 从库1 IP candidate_master1 # 是候选主库 check_repl_delay0 [server3] hostname172.25.254.30 # 从库2 IP no_master1 # 不能作为主库例如用于备份或特定用途7. 检测环境在启动MHA Manager之前必须进行两个关键检查确保SSH免密登录和MySQL主从复制状态正常。# 1. 检查MHA管理节点到所有MySQL节点之间的SSH无密码连接 [rootmha mha4mysql-manager-0.58]# masterha_check_ssh --conf/etc/masterha/app1.cnf # ... 输出应显示 All SSH connection tests passed successfully. # 2. 检查MySQL主从复制集群的配置和运行状态 [rootmha mha4mysql-manager-0.58]# masterha_check_repl --conf/etc/masterha/app1.cnf # ... 输出应显示 MySQL Replication Health is OK. # 并展示出当前的拓扑结构172.25.254.10 (Master) - 172.25.254.20, 172.25.254.30 (Slaves)8. 在所有MySQL节点上安装MHA-Node软件依赖每个运行MHA-Node的MySQL服务器也需要安装与Manager节点相同的Perl模块以确保Node脚本能正常运行。# 在所有的数据库主机mysql-node1~3上安装Perl依赖 [rootmysql-node1~3 ~]# dnf install perl perl-DBD-MySQL perl-CPAN -y # 解压CPAN模块包如果存在离线包 [rootmysql-node1~3 ~]# tar zxf cpan_plugin.tar.gz # 进入CPAN安装所需的Perl模块步骤同Manager节点 [rootmysql-node1~3 ~]# cpan # ... 安装 Config::Tiny, Log::Dispatch, Mail::Sender, Parallel::ForkManager # 同样进行模块安装成功验证 [rootmysql-node1~3 ~]# perl -MConfig::Tiny -e print OK\n ...2.集群切换操作2.1手动切换Master无故障切换在线切换在主库运行正常时手动将其角色切换到另一台候选主库如172.25.254.20原主库降级为新主库的从库。适用于计划内维护。# 切换前的初始状态20和30都是从库复制来自10 [rootmysql-node2 ~]# mysql -uroot -ptest -e show slave status\G; | head -n 10 # Master_Host: 172.25.254.10 # 执行在线切换命令将主库从10切换到20并将原主库10设置为20的从库(--orig_master_is_new_slave) [rootmha ~]# masterha_master_switch \ --conf/etc/masterha/app1.cnf \ --master_statealive \ --new_master_host172.25.254.20 \ --new_master_port3306 \ --orig_master_is_new_slave \ --running_updates_limit10000 # 命令执行过程中会进行交互式确认并显示详细的切换步骤和状态。 # 切换后验证10和30都应指向20作为主库 [rootmysql-node1 ~]# mysql -uroot -ptest -e show slave status\G; | head -n 15 # Master_Host: 172.25.254.20 [rootmysql-node3 ~]# mysql -uroot -ptest -e show slave status\G; | head -n 15 # Master_Host: 172.25.254.20Master故障后切换故障转移在主库172.25.254.10发生故障宕机后手动触发故障转移流程将备选主172.25.254.20提升为新的主库。# 模拟主库故障后执行故障转移命令 [rootmha ~]# masterha_master_switch \ --master_statedead \ --conf/etc/masterha/app1.cnf \ --dead_master_host172.25.254.10 \ --dead_master_port3306 \ --new_master_host172.25.254.20 \ --new_master_port3306 \ --ignore_last_failover # 命令会检测到10已宕机并提示用户确认是否继续。确认后MHA将20提升为主库并尝试让30去复制20。 # 查看切换结果 [rootmysql-node3 ~]# mysql -uroot -ptest -e show slave status\G; | head -n 15 # Master_Host: 172.25.254.20 # 故障恢复后处理 # 1. 移除MHA为防止脑裂产生的锁文件 [rootmha ~]# ls /etc/masterha/ # 会看到 app1.failover.complete 文件 [rootmha ~]# rm -fr /etc/masterha/app1.failover.complete # 2. 修复原主库10并重新加入集群作为20的从库 [rootmysql-node1 ~]# /etc/init.d/mysqld start [rootmysql-node1 ~]# mysql -uroot -ptest -e CHANGE MASTER TO MASTER_HOST172.25.254.20, MASTER_USERtest, MASTER_PASSWORDtest, MASTER_AUTO_POSITION1; [rootmysql-node1 ~]# mysql -uroot -ptest -e start slave; [rootmysql-node1 ~]# mysql -uroot -ptest -e show slave status\G; | head -n 15 # Master_Host: 172.25.254.202. 自动切换启动MHA Manager监控进程当检测到主库故障时自动执行故障转移无需人工干预。# 为了方便观察日志可以先清空旧日志并实时查看 [rootmha ~]# /etc/masterha/*.log [rootmha ~]# watch -n 1 cat /etc/masterha/mha.log # 打开另一个终端执行 # 在第一个终端以后台进程方式启动MHA Manager监控 [rootmha ~]# masterha_manager --conf/etc/masterha/app1.cnf [1] 运行中 masterha_manager --conf/etc/masterha/app1.cnf # 模拟主库故障观察自动切换过程 [rootmysql-node1 ~]# /etc/init.d/mysqld stop # 此时在 watch 终端可以看到MHA检测到主库宕机并自动开始执行故障转移流程最终将20提升为新主库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…