# MySQLDeploy **Repository Path**: dbother/mysql_deploy ## Basic Information - **Project Name**: MySQLDeploy - **Description**: 一键部署MySQL,支持部署单机、基于VIP的高可用 支持一键备份、恢复、闪回等 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: https://gitee.com/dbother/mysql_deploy - **GVP Project**: No ## Statistics - **Stars**: 10 - **Forks**: 0 - **Created**: 2023-09-27 - **Last Updated**: 2024-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 概述 ## 环境 脚本基于 CentOS 7.9 测试执行,需要部署到其他版本需要更新soft目录下资源包 ## 功能 部署生产环境可使用的MySQL高可用集群 - 支持单机部署 - 支持主从部署 - 主从使用增强半同步模式,防止数据丢失 - 支持基于 orchestrator + vip 的高可用集群部署(3台服务器) - orchestrator 组件3台的话会自建 raft集群 - 发生切换可发送钉钉消息 - 支持基于 replication-manager +vip 的高可用集群部署(支持2台服务器部署) - 这个模式 replication-manager高可用组件是单点的 - 发生切换可发送钉钉消息 - 支持先部署主从,后期加高可用组件 - 支持部署备份脚本 - 可远程备份 - 可发送钉钉消息 ## 限制 - 当前仅支持2层 VIP 模式 - 高可用模式需要配置免密(为了调用切换VIP) - 对于 event ,高可用切换时候会关闭原主的 event_scheduler,切换后不会打开新主的event置为 enable,因为原生时间定时器不能保证主备event状态一致。功能看需求再去实现,也可自行实现,思路基本是: - 1.定时记录主库event的状态,如在某文件或某个库内 - 2.同步event状态到备库 - 3.高可用切换时读取文件设置状态 - 脚本基于CentOS 7.9 测试,理论上RedHat系的都能支持(需要更换对应安装包) # MySQL部署 ## 脚本帮助信息: ``` # ./deploy.sh Usage: ./deploy.sh single 单机部署 ./deploy.sh master 部署master节点 ./deploy.sh slave 部署slave节点,会自动建立主从关系 ./deploy.sh orchestrator 部署高可用中间件orchestrator ./deploy.sh ha_orch_with_vip 部署基于 orchestrator+VIP 的MySQL集群 ./deploy.sh ha_replication_manager_with_vip 部署基于 replication-manager+VIP 的MySQL集群 ./deploy.sh master_alone 单独部署master节点 ./deploy.sh slave_alone 单独部署slave节点,不会自动建立主从 ./deploy.sh orchestrator 仅部署 orchestrator 高可用组件 ./deploy.sh replication_manager 仅部署 replication-manager 高可用组件 ./deploy.sh check_ssh 检查ssh是否已正常配置 ./deploy.sh vip_add 根据配置文件信息添加VIP ./deploy.sh vip_del 根据配置文件信息删除VIP ## 卸载 ./deploy.sh uninstall_mysql [3306] 卸载当前服务器上的 MySQL ./deploy.sh uninstall_orchestrator 卸载当前服务器上的 Orchestrator ./deploy.sh uninstall_replication_manager 卸载当前服务器上的 replication-manager ./deploy.sh uninstall_all [3306] 卸载当前服务器上的所有相关的,包括高可用中间件与MySQL ``` ## 相关路径 | 路径 | 用途 | | --- | --- | | /usr/local/mysql | MySQL解压路径软链 | | ${MYSQL_DIR}/mysql${MYSQL_PORT}/data | 数据路径,会根据配置文件中MYSQL_DIR参数创建,如MYSQL_PORT=/app,MYSQL_PORT=3306,则安装后的MySQL数据路径为 /app/mysql3306/data | | /tmp/mysql.sock | Mysql socket软链,若不存在则连接是需要指定sock路径 | | /usr/local/orchestrator | Orch 高可用组件,其中会包含切换使用的hook脚本 | | /etc/orchestrator.json | Orch 高可用组件配置文件信息 | | /etc/replication-manager/ | Replication-manager 高可用组件配置与脚本相关信息 | ## 1.下载并上传安装包 MySQL下载地址:[https://dev.mysql.com/downloads/mysql/](https://dev.mysql.com/downloads/mysql/) 将安装包放入指定路径 ```shell mv mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz Deploy_MySQL/soft ``` ## 2.单机模式 ### 2.1 修改配置文件 ``` cd Deploy_MySQL/install/ vi conf_mysql.cnf # 根据实际情况修改如下参数 # 本机IP IPADDR=192.168.60.155 # 8.0/5.7 MYSQL_VERSION='8.0' MYSQL_PKG=mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz MYSQL_DIR=/data # 数据文件所在磁盘名称 ## 可使用 df -h /data 和 ll /sys/block 判断出,主要用于判断并修改磁盘调度策略 DISK_DEVICE_NAME=sda # 自定义端口 MYSQL_PORT=3306 # 默认获取服务器物理内存,可自定义 MEMORY_ALLLOW_GB=`free -g|grep Mem|awk '{print $2}'` # 密码不能使用双引号包裹,root@localhost的密码 INIT_PASSWORD='Yq@test#123' # 创建一个超级用户 SUPER_USER='super_admin' SUPER_PASSWORD='Yq@Test$MySQL#123' ``` ### 2.2 执行安装 ```shell ./deploy.sh single ``` ### 2.3 加载环境变量 若不执行的话,可重新打开下shell窗口 ``` # 安装后会有提示,执行 source /etc/profile.d/mysql_set_env.sh ``` ### 2.4 启动关闭MySQL ```shell systemctl start mysqld${port} systemctl start mysqld3306 systemctl stop mysqld3306 systemctl status mysqld3306 ``` ## 3.主从模式 可部署为一主多从 ### 3.1 环境 - 192.168.60.155 主 - 192.168.60.156/192.168.60.157 从 ### 3.2 修改配置文件 > vim Deploy_MySQL/install/config_mysql.cnf ``` cd Deploy_MySQL/install/ vi conf_mysql.cnf # 根据实际情况修改如下参数 # 本机IP IPADDR=192.168.60.155 # 8.0/5.7 MYSQL_VERSION='8.0' MYSQL_PKG=mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz MYSQL_DIR=/data # 数据文件所在磁盘名称 ## 可使用 df -h /data 和 ll /sys/block 判断出,主要用于判断并修改磁盘调度策略 DISK_DEVICE_NAME=sda # 自定义端口 MYSQL_PORT=3306 # 默认获取服务器物理内存,可自定义 MEMORY_ALLLOW_GB=`free -g|grep Mem|awk '{print $2}'` # 密码不能使用双引号包裹,root@localhost的密码 INIT_PASSWORD='Yq@test#123' # 创建一个超级用户 SUPER_USER='super_admin' SUPER_PASSWORD='Yq@Test$MySQL#123' ######################## 主从模式配置 ########################### # 服务器组 SERVER_GROUP='192.168.60.155,192.168.60.156,192.168.60.157' MASTER_IP='192.168.60.155' REPL_USER='repl' REPL_PASSWORD='Yq@Repl#123' # 用户默认host,类似于 create user ... 'repl'@'%' REPL_IP_SEGMENT='%' ``` ### 3.3 传入安装文件与配置文件 ``` scp -P22 -r Deploy_MySQL root@192.168.60.156:/opt scp -P22 -r Deploy_MySQL root@192.168.60.157:/opt ``` ### 3.4 修改从库配置文件 从库上配置文件由于主库已修改过,仅需要修改参数 ipaddr,将值改为自身服务器ip ``` vim /opt/Deploy_MySQL/install/config_mysql.cnf # 156 IPADDR=192.168.60.156 # 157 IPADDR=192.168.60.157 ``` ### 3.5 执行安装 未使用跳转一键安装,因此需要分表在3台机器上执行 ``` # 155 ,需要先安装主 ./deploy.sh master # 156/157 主安装完成后,可同时从服务器上执行 ./deploy.sh slave ``` ### 3.6 加载环境变量 若不执行的话,可重新打开下shell窗口 ``` # 安装后会有提示,每台服务端执行 source /etc/profile.d/mysql_set_env.sh ``` 1主2从架构就部署好了 ## 4.orch高可用模式 ### 4.1 环境 ORCH + VIP 模式需要有同网段的 VIP,用于切换后漂移 | 服务器 | 描述 | | --- | --- | | 192.168.60.111 | VIP | | 192.168.60.155 | 主 | | 192.168.60.156 | 从 | | 192.168.60.157 | 从 | ### 4.2 修改配置文件 > vim Deploy_MySQL/install/config_mysql.cnf ``` 已配置上面的单机与主从相关参数,这里省略了... ###################### 高可用模式(依赖主从模式参数) ############################### # VIP,必须要有VIP VIP="192.168.60.111" # 网卡名称,可使用 [ip -4 a] 查看 NET_WORK_CARD_NAME='ens33' # ssh 端口,默认使用免密使用的是 root 用户,而端口一般默认都是 22 SSH_PORT=22 # 高可用组件使用的用户,会在主库创建 HA_USER='ha_monitor' HA_PASSWORD='yq@ABC^123#forha' # 高可用组件web界面登陆用户名密码,一般不用改 HA_HTTP_USER='admin' HA_HTTP_PASSWORD='repman' # Orch高可用组件的web端口,默认3000,replication 使用了默认端口,若需要更改端口请安装完成后更改配置文件后重启下 HA_PORT=3000 # 逗号分割,高可用组件自身高可用,若设置为空,则仅单机部署,组件自身没有高可用,若orch组件挂掉则无法支持数据库切换 # 默认和MySQL部署在一起 HA_NODES=${SERVER_GROUP} ######################## dingding通知配置[可选修改] ########################## DINGDING_SWITCH=0 WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' SECRET='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 支持 text/markdown SEND_TYPE="markdown" # IS_AT_ALL 中设置任何值代表执行 true ,默认为false IS_AT_ALL="" # 设置电话号码会@那个人,这个设置值的话 -at_all 参数不能配置" AT_MOBILES="" ``` ### 4.3 同步安装文件与配置文件 ``` scp -P22 -r Deploy_MySQL root@192.168.60.156:/opt scp -P22 -r Deploy_MySQL root@192.168.60.157:/opt ``` ### 4.4 修改从库配置文件 从库上配置文件由于主库已修改过,仅需要修改参数 ipaddr,将值改为自身服务器ip ``` # 156 IPADDR=192.168.60.156 # 157 IPADDR=192.168.60.157 ``` ### 4.5 执行安装 ``` # 155 首先安装设定的主服务器 ./deploy.sh ha_orch_with_vip # 156/157 MySQL 主安装完成后,可同时在从服务器执行 ./deploy.sh ha_orch_with_vip ``` ### 4.6 加载环境变量 ``` # 安装后会有提示,每台服务端执行 source /etc/profile.d/mysql_set_env.sh source /etc/profile.d/orchestrator_set_env.sh ``` ### 4.7 执行拓扑发现 #### 4.7.1 方法1:WEB端发现 地址:[http://192.168.60.155:3000](http://192.168.60.155:10001) ,可任意一台安装orchestrator的地址 用户名/密码:配置文件中配置的,默认 admin/repman ![image-20240122162255780](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221623771.png) ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221623010.png) 点击Submit 后 ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221623392.png) 点击Clusters-->Dashboard刷新几次 ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221624278.png) 点击进去发现拓扑已完成 ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221624089.png) 可拖动执行切换操作 ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221624722.png) #### 4.7.1 方法2:使用命令发现 1.加载环境变量 ```shell # 需要加载环境变量,可 echo打印下环境变量看下 # source /etc/profile.d/orchestrator_set_env.sh # echo $ORCHESTRATOR_API 192.168.60.155:3000/api 192.168.60.156:3000/api 192.168.60.157:3000/api ``` 2.使用命令行操作 ```shell # 拓扑发现 ## 首先确认orch集群组是否正常 # orchestrator-client -b admin:repman -c which-api 192.168.60.155:3000/api ## 执行发现拓扑 # orchestrator-client -b admin:repman -c discover -i 192.168.60.155:3312 test01:3312 ``` > 其他命令:[https://github.com/openark/orchestrator/blob/master/docs/orchestrator-client.md](https://github.com/openark/orchestrator/blob/master/docs/orchestrator-client.md) ```shell # 查看已知集群 # orchestrator-client -b admin:repman -c clusters test01:3312 # 查看当前拓扑 # orchestrator-client -b admin:repman -c topology -i test01:3312 test01:3312 [0s,ok,8.0.34,rw,ROW,>>,GTID] + test02:3312 [0s,ok,8.0.34,ro,ROW,>>,GTID] + test03:3312 [0s,ok,8.0.34,ro,ROW,>>,GTID] # 忘记拓扑 orchestrator-client -b admin:repman -c forget -i test01:3312 ``` ### 4.8 启停 ``` systemctl start orchestrator systemctl stop orchestrator systemctl status orchestrator ``` ### 4.9 发生切换处理 1.若存在钉钉告警,则会发送类似如下告警信息: ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221625983.png) 2.可能会有被提出集群的服务器存在(如MySQL异常挂掉,或断电等异常问题),可以使用下面脚本将此MySQL实例作为从库重新加入集群 ```shell # ./rejoin_as_slave.sh Usage: bash rejoin_as_slave.sh 主节点IP 如:./rejoin_as_slave.sh 192.168.66.155 ``` ## 5.Replication-manager 高可用模式 ### 5.1 环境 - Replication-manager + VIP 模式需要有同网段的 VIP,用于切换后漂移 - 如果是2台服务器的话同样的安装方式,只不过少安装一台从库 - 默认会设置配置文件中的前两个IP作为优先切换选择服务器,如 IP1,IP2,IP3 ,则切换时会优先选择IP1,IP2 | 服务器 | 描述 | | --- | --- | | 192.168.60.111 | VIP | | 192.168.60.155 | 主 | | 192.168.60.156 | 从 | | 192.168.60.157 | 从 | ### 5.2 修改配置文件 这里配置信息与 orch高可用模式一样的 vim Deploy_MySQL/install/config_mysql.cnf ``` 已配置上面的单机与主从相关参数,这里省略了... ###################### 高可用模式(依赖主从模式参数) ############################### # VIP,必须要有VIP VIP="192.168.60.111" # 网卡名称,可使用 [ip -4 a] 查看 NET_WORK_CARD_NAME='ens33' # ssh 端口,默认使用免密使用的是 root 用户,而端口一般默认都是 22 SSH_PORT=22 # 高可用组件使用的用户,会在主库创建 HA_USER='ha_monitor' HA_PASSWORD='yq@ABC^123#forha' # 高可用组件web界面登陆用户名密码,一般不用改 HA_HTTP_USER='admin' HA_HTTP_PASSWORD='repman' # Orch高可用组件的web端口,默认3000,replication 使用了默认端口,若需要更改端口请安装完成后更改配置文件后重启下 HA_PORT=3000 # 逗号分割,高可用组件自身高可用,若设置为空,则仅单机部署,组件自身没有高可用,若orch组件挂掉则无法支持数据库切换 # 默认和MySQL部署在一起 HA_NODES=${SERVER_GROUP} ######################## dingding通知配置[可选修改] ########################## DINGDING_SWITCH=0 WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' SECRET='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 支持 text/markdown SEND_TYPE="markdown" # IS_AT_ALL 中设置任何值代表执行 true ,默认为false IS_AT_ALL="" # 设置电话号码会@那个人,这个设置值的话 -at_all 参数不能配置" AT_MOBILES="" ``` ### 5.3 同步安装文件与配置文件 ``` scp -P22 -r Deploy_MySQL root@192.168.60.156:/opt scp -P22 -r Deploy_MySQL root@192.168.60.157:/opt ``` ### 5.4 修改从库配置文件 从库上配置文件由于主库已修改过,仅需要修改参数 ipaddr,将值改为自身服务器ip ``` # 156 IPADDR=192.168.60.156 # 157 IPADDR=192.168.60.157 ``` ### 5.5 执行安装 - 先部署一个主从 - 选一个从库安装高可用组件,建议最后一个从库IP地址 ``` # 155 ,需要先安装主 ./deploy.sh ha_replication_manager_with_vip # 156/157 主安装完成后,可同时从服务器上执行 ./deploy.sh ha_replication_manager_with_vip # 157 安装 replication 高可用组件 ./deploy.sh replication_manager ``` ### 5.6 加载环境变量 ``` # 安装后会有提示,每台服务端执行 source /etc/profile.d/mysql_set_env.sh ``` ### 5.7 确认拓扑 #### 5.7.1 方式1:web界面 地址:[http://192.168.60.155:10001](http://192.168.60.155:10001) 用户名/密码:配置文件中配置的,默认 admin/repman ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221626859.png) 注意:确认下 ALTER 模块与下方日志模块有没有错误,若有错误,请排查 /var/log/replication-manager.log HA 这个按钮点击的话可测试高可用切换 ![image.png](https://cdn.jsdelivr.net/gh/dibrother/blogImages/img/202401221627000.png) 5.7.2 方式2:使用命令行 ``` # 查看拓扑 # replication-manager-cli topology | Group: cluster1 | Mode: Manual Id Host Port Status Failures Using GTID Current GTID Slave GTID Replication Health Delay RO db2586268195480129671 192.168.60.155 3312 Master 0 Yes 0-3424622915634688266-2,0-5865390189271014773-12 0 OFF db14381080583893135461 192.168.60.156 3312 Slave 0 Yes 0-3424622915634688266-2,0-5865390189271014773-12 0-0-0,0-5856-0 0 ON db11222596407304359995 192.168.60.157 3312 Slave 0 Yes 0-3424622915634688266-2,0-5865390189271014773-12 0-0-0,0-5856-0 # 执行switchover切换 replication-manager-cli switchover ``` ### 5.8 启停 ``` systemctl start replication-manager systemctl stop replication-manager systemctl status replication-manager ``` ## 6.先部署主从,后添加高可用 1.部署主从,参考上面 [3.主从模式] 2.对已有主从添加高可用(默认配置文件已配置,不清楚查看上述高可用部署节点文档) ```shell ############# orch模式 ############### # 服务器分别执行 ./deploy.sh orchestrator # 主节点执行添加VIP ./deploy.sh vip_add ########## replication 模式###################### # 选择一台从服务器 ./deploy.sh replication_manager ``` ## 7.卸载 ```shell # 卸载所有 ./deploy.sh uninstall_all 3306 # 卸载MySQl ./deploy.sh uninstall_mysql 3306 # 卸载orchestrator ./deploy.sh uninstall_orchestrator # 卸载 replication-manager ./deploy.sh uninstall_replication_manager ``` # 备份部署 ## Xtrabackup部署 ### 1.下载并安装xtrabackup > 下载地址:[https://www.percona.com/downloads#percona-xtrabackup](https://www.percona.com/downloads#percona-xtrabackup) > 5.7 版本下载:Percona XtraBackup 2.4 > 8.0 版本下载对应的小版本:如MySQL 8.0.34 下载对应的 Percona XtraBackup 8.0.34 ```shell yum install -y percona-xtrabackup-80-8.0.34-29.1.el7.x86_64.rpm ``` ### 2.创建备份用户 脚本使用 socket 方式连接进行备份,因此创建为 '用户'@'localhost' 的用户 #### 5.7 版本 ```shell # 用户名/密码可自行修改 CREATE USER 'databak'@'localhost' IDENTIFIED BY 'Yq@BackUP!321'; GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'databak'@'localhost'; ``` #### 8.0 版本 ```shell # 用户名/密码可自行修改 CREATE USER 'databak'@'localhost' IDENTIFIED BY 'Yq@BackUP!321'; GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'databak'@'localhost'; GRANT SELECT ON performance_schema.log_status TO 'databak'@'localhost'; GRANT SELECT ON performance_schema.keyring_component_status TO'databak'@'localhost'; GRANT SELECT ON performance_schema.replication_group_members TO databak@'localhost'; ``` ### 3.修改配置文件 选择一台从库用于备份,选择从库原因为不影响主库写入 - 如果需要远程备份 - 需要备份服务器与远程服务器做好ssh免密 - 远程备份目录已创建 - REMOTE_BACKUP_SWITCH 设置为 1 - 如需钉钉发送每日备份信息 - DINGDING_SWITCH 设置为 1 - WEBHOOK_URL / SECRET 设置钉钉机器人对应值即可 ```shell cd Deploy_MySQL/backup/ vim conf_xtrabackup.conf ######################## xtraback信息配置[必须根据环境修改] ########################## BACKUP_SAVE_DAYS=7 BACKUP_DIR=/data/backup BACKUP_PREFIX_NAME="xtra_full" ## 压缩并发进程与备份并发进程数,默认都为2 COMPRESS_THREADS=2 PARALLEL=2 ######################## Mysql备份用户信息[必须根据环境修改] ########################## BACKUP_USER=databak BACKUP_PWD='Yq@BackUP!321' MYSQL_CNF_DIR=/data/mysql3306/my3306.cnf MYSQL_SOCK_DIR=/data/mysql3306/data/mysql.sock LOCAL_HOST_IP=192.168.60.155 ######################## 远程传输配置,使用远程需要配置免密[可选修改] ########################## ## 远程备份开关,默认0,设置为 1 开启 REMOTE_BACKUP_SWITCH=0 REMOTE_TITLE="数据库远程备份" REMOTE_USER=root REMOTE_HOST=192.168.60.156 REMOTE_PORT=22 REMOTE_BACKUP_DIR=/data/backup ######################## dingding通知配置[可选修改] ########################## DINGDING_SWITCH=0 MSG_TITLE="数据库备份" WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' SECRET='xxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 支持 text/markdown SEND_TYPE="markdown" # IS_AT_ALL 中设置任何值代表执行 true ,默认为false IS_AT_ALL="" # 设置电话号码会@那个人,这个设置值的话 -at_all 参数不能配置" AT_MOBILES="" ``` ### 3.执行备份 #### 3.1 创建备份文件 ```shell mkdir -p /data/backup ``` #### 3.2 执行备份 ```shell # ./backup_xtrabackup.sh backup 2023-09-22 15:07:26 [Note] 进行备份前预检查 2023-09-22 15:07:26 [Note] 预检查完成 2023-09-22 15:07:26 [Note] 开始清理历史备份 2023-09-22 15:07:26 [Note] 清理历史备份清理完成 2023-09-22 15:07:26 [Note] 2023-09-22 15:07:26 开始进行本地备份 2023-09-22 15:07:41 [Note] 备份[xtra_full_20230922150726.xb]成功 2023-09-22 15:07:41 [Note] 本地备份完成 ``` #### 3.3 设置每日定时备份 ```shell # ./backup_xtrabackup.sh addcron *****add crontab success***** SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed # 每天凌晨2点55分执行备份 55 02 * * * root /bin/bash /root/Deploy_MySQL/backup/backup_xtrabackup.sh backup > /data/backup/log/xtra_full_`date '+\%Y\%m\%d\%H\%M\%S'`_script.log 2>&1 ``` > 定时任务配置在 /etc/crontab 下 ## mysqldump ```shell 修改脚本 backup_mysqldump.sh 内对应配置参数 ``` ## clone > 使用 8.0版本自带的clone插件进行备份,建议版本 8.0.27+ ```shell 修改配置文件 backup_clone.conf 执行 backup_clone.sh ``` # 恢复 ```shell cd recovery ``` ## xtrabackup 恢复 1.修改配置文件: - full_rec.conf 全量恢复配置文件 - gtid_rec.conf 基于指定GTID的恢复 - pos_rec.conf 基于指定POS点的恢复 - time_rec.conf 基于指定时间点的恢复 2.执行恢复 ```shell ./xtra_recover.sh Usage: bash xtra_recover.sh full 仅全量恢复(配置文件full_rec.conf) xtra_recover.sh time 增量恢复到某个时间点(配置文件time_rec.conf) xtra_recover.sh pos 增量恢复到某个POS点(配置文件pos_rec.conf) xtra_recover.sh gtid 增量恢复到某个GTID(配置文件gtid_rec.conf) ``` ## clone 恢复 1.修改配置文件: - full_rec.conf 全量恢复配置文件 - gtid_rec.conf 基于指定GTID的恢复 - pos_rec.conf 基于指定POS点的恢复 - time_rec.conf 基于指定时间点的恢复 2.执行恢复 ```shell ./clone_recover.sh Usage: bash clone_recover.sh full 仅全量恢复(配置文件full_rec.conf) clone_recover.sh time 增量恢复到某个时间点(配置文件time_rec.conf) clone_recover.sh pos 增量恢复到某个POS点(配置文件pos_rec.conf) clone_recover.sh gtid 增量恢复到某个GTID(配置文件gtid_rec.conf ``` ## 误更改数据闪回 1.更改配置信息 vim do_my2sql.sh ```shell host='192.168.60.156' user='testa' password='testa@123' port=3306 database='demo_test' tables='demo01' start_binlog_file='mysql-bin.002419' end_binlog_file='mysql-bin.002420' start_time='2023-06-27 15:50:00' end_time='2023-06-27 16:00:00' ``` 2.执行生成执行SQL或回滚SQL ```shell ./do_my2sql.sh ./do_my2sql.sh [param] 2sql Previously executed SQL rollback Rollback statements for previously executed SQL ``` 3.整理获取到的SQL进行回滚操作 # MySQL版本升级 > 注意: > 1.升级会进行重启 > 2.如果配置开启了备份原有数据,请注意磁盘空间是否足够 > 3.不建议跨版本直接升级,若跨版本升级请了解清楚版本差异 ```shell # 修改相关配置参数 vim upgrade_mysql.sh #执行升级操作 ./upgrade_mysql.sh ``` # 其他处理 ## 添加/删除VIP 1.修改配置文件VIP相关信息 2.执行 ```shell # 添加vip ./deploy.sh vip_add # 删除vip ./deploy.sh vip_del ``` 或可直接执行 ```shell # 此脚本无需依赖配置文件信息 ## 帮助信息 # ../common/vip_manager.sh Usage: ../common/vip_manager.sh [add/del] [vip] [interface] 添加或删除VIP 示例: 添加:../common/vip_manager.sh 10.10.10.111 eth0 add 删除:../common/vip_manager.sh 10.10.10.111 eth0 del ``` ## 备份恢复出来的节点重新加入到集群 在短时间中断的节点,可作为从库加入到集群中去 ```shell # ./rejoin_as_slave.sh Usage: bash rejoin_as_slave.sh 主节点IP 如:./rejoin_as_slave.sh 192.168.66.161 ``` ## 检查本机与配置的其他服务器的SSH ```shell ./deploy.sh check_ssh ``` ## 脚本可单独执行 ```shell ./deploy_master_slave.sh Usage: ./deploy_master_slave.sh master 部署master节点 ./deploy_master_slave.sh slave 部署slave节点 ./deploy_master_slave.sh tobe_slave_with_reset [master_ip] 将当前节点作为从加入到指定主节点上去,注意:会在当前服务器执行 reset master ,仅适合刚安装完成的slave ./install_mysql.sh Usage: 单独部署的master/slave,默认开启read_only参数的,需要自行配置read_only与复制rpl_semi_sync_replica_enabled开关 ./install_mysql.sh [./template/[5.7/8.0]/my.cnf.single] 部署单机节点 ./install_mysql.sh [./template/[5.7/8.0]/my.cnf.master] 部署master节点 ./install_mysql.sh [./template/[5.7/8.0]/my.cnf.slave] 部署slave节点,不会自动建立主从 等... ```