麻涌企业网站建设,微信开放平台介绍,上海市嘉定建设局网站,广东省工程招投标信息网目录一、基本介绍二、线上使用经验1、MySQL慢查询日志2、生产环境大数据表如何添加索引3、MySQL在线修改表结构4、MySQL备份/恢复工具mysqldump案例一#xff1a;mysqldump备份单个数据库案例二#xff1a;备份所有数据库案例三#xff1a;备份指定数据案例四#xff1a;只…目录一、基本介绍二、线上使用经验1、MySQL慢查询日志2、生产环境大数据表如何添加索引3、MySQL在线修改表结构4、MySQL备份/恢复工具mysqldump案例一mysqldump备份单个数据库案例二备份所有数据库案例三备份指定数据案例四只导出数据库表结构不包含数据案例五只导出数据不添加建表语句案例六导出指定数据库的指定表案例七导出指定数据库的多个表案例八压缩备份5、MySQL主从数据不一致的数据修复6、pt-table-checksum 工具校验主从不一致的差异三、如何安装pt-online-schema-change离线安装包下载地址报错缺少perl-Digest-MD5包四、其他一、基本介绍二、线上使用经验1、MySQL慢查询日志连接数据库使用SHOW VARIABLES LIKE %slow_query_log%;命令查询慢查询日志开关输出如下slow_query_log的值OFF表示慢查询日志记录功能是关闭的需要设置成ON才能打开slow_query_log_file的值为慢查询日志的文件路径执行SET GLOBAL slow_query_log ON;打开慢查询日志开关线上慎用。执行命令SHOW VARIABLES LIKE %long_query_time%;输出慢查询的拦截时间默认时间是10s可通过SET long_query_time 1;命令修改慢查询的拦截时间比如说设置成1s。测试一下另起一个窗口执行tail -f /usr/local/mysql-8/data/localhost-slow.log监控慢查询日志内容然后这边执行一个超过1秒的查询如下图所示END2、生产环境大数据表如何添加索引生产环境单个数据库的前提下如果单表数据量很大达上千万数据了如何不影响主业务运行的前提下给大表某个字段添加索引呢答案有很多种下面介绍以下两种方式1使用MySQL自带的Oline DDL功能MySQL提供了ALGORITHMINPLACE选项允许在不锁定表的情况下添加索引这就意味着即使在添加索引时应用程序仍然可以访问该表的其他数据其中INPLACE算法可以有效减少对业务的影响创建索引的SQL语句如下所示ALTERTABLEyour_tableALGORITHMINPLACE,LOCKNONE,ADDINDEXindex_name(column1,column2);ALGORITHMINPLACE:指定使用就地算法进行表的修改这样MySQL就不会复制表数据而是直接修改原始表的数据结构LOCKNONE:在索引创建过程中不会对表进行锁定其他操作可以继续进行这样可以最大程度减少对业务的影响此法最适用InnoDB存储引擎需要MySQL版本再5.6及以上。2使用 pt-online-schema-change 工具如果表非常大或者不支持在线索引创建另一种常用的方案是使用 Percona Toolkit 中的 pt-online-schema-change 工具。该工具的工作原理是创建一个新的表然后逐渐将数据从原表迁移到新表中完成后将表切换过来整个过程不会对业务造成大的影响。# 以下是使用 pt-online-schema-change 工具添加索引的示例pt-online-schema-change--alter ADD INDEX index_name (column1, column2) Dyour_database,tyour_table --execute3、MySQL在线修改表结构其实和第二点是一样的使用Online DDL或者pt-online-schema-change 工具这里不做过多介绍直接上操作1使用MySQL自带的Oline DDLALTERTABLEyour_tableALGORITHMINPLACE,LOCKNONE,ADDCOLUMN字段名varchar(20)defaultcomment这是字段描述;此法最适用InnoDB存储引擎需要MySQL版本再5.6及以上。2使用 pt-online-schema-change 工具执行命令pt-online-schema-change --socket/tmp/mysql.sock --user用户名 --password密码 --alter add column 字段名 varchar(20) default comment 这是字段描述 D数据库名, t表名 --print --execute关于socket的路径大家可根据/etc/my.cnf配置文件中配置的路径选择填写。这种方式是要录入数据库名、表名、账号、密码然后还有字段名、类型、字段描述这里我默认设置的varchar(20)简单易懂可以自行按照业务来设置执行前请在测试环境先尝试一遍。演示一下执行命令/usr/bin/pt-online-schema-change\--socket/tmp/mysql.sock\--userroot\--passworddinglian123\--alterADD COLUMN description varchar(20) DEFAULT COMMENT 这是字段描述\Dweb_app,tuser\--print\--execute再去查询表结构4、MySQL备份/恢复工具mysqldumpMySQL常用的备份/恢复工具有mysqldump、mydumper、XtraBackup。mysqldump工具 这是官方自带的工具mydumper工具 逻辑备份工具XtraBackup工具物理热备份工具本案例讲述的是使用mysqldump备份数据库实现原理为通过协议链接到MySQL数据库将需要备份的数据查询出来然后再将查询出来的数据转化为insert语句当我们需要还原数据时只需要执行这些insert语句就可以恢复数据。下面进行实战mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到MySQL 数据库将需要备份的数据查询出来将查询出的数据转换成对应的insert语句当我们需要还原这些数据时只要执行这些insert 语句即可将对应的数据还原。案例一mysqldump备份单个数据库1备份一个数据库目前我们有web_app数据库下有一个user表如下图所示备份该数据库执行命令mysqldump --userroot -p --databases web_app web_app20251217.sql将本机的web_app数据库备份到当前目录下的web_app20251217.sql中其他参数如下所示-p:数据库密码 --hostname:数据库地址,本机可以不写 --username:数据库账号 --port端口:数据库端口,如果默认是3306可以不写 --databases:导出的数据库名 --tables:导出指定表的数据和结构执行结果2删除web_app数据库然后使用备份文件恢复该数据库先删除数据库然后在创建数据库web_app此时的库下没有任何表或者数据然后再使用source 文件路径命令进行恢复如图所示END…案例二备份所有数据库mysqldump -u root -p -Aall_$(date%F).sql# 终端提示输入密码Enter password:# 执行完成后当前目录生成文件all_2025-12-17.sql以 root 用户身份登录 MySQL输入密码后导出服务器上所有数据库的结构和数据并将导出的 SQL 内容保存到当前目录下以「all_年月日.sql」命名的文件中。案例三备份指定数据备份单库或者多库# 格式mysqldump -u 用户名 -p 数据库名 表名 备份文件名.sqlmysqldump -u root -p -B 数据库名数据目名_$(date%F).sql# 备份db1和db2两个数据库生成合并的备份文件mysqldump -u root -p -B db1 db2db1_db2_$(date%F).sql以 root 用户身份登录 MySQL输入密码后备份指定的单个数据库含该库下所有表、视图、存储过程等并将备份的 SQL 文件以「数据库名_年月日.sql」的格式保存到当前目录。恢复命令# 带 -B 备份的恢复无需提前建库mysql -u root -p数据库名_2025-12-17.sql# 单表备份的恢复需先建库并切换mysql -u root -p mysqlCREATE DATABASE IF NOT EXISTS test_db;# 建库mysqlUSE test_db;# 切换到目标库mysqlSOURCE user_2025-12-17.sql;# 恢复表案例四只导出数据库表结构不包含数据mysqldump -u root -p -B -d db_namedb_name_not_data_$(date%F).sql案例五只导出数据不添加建表语句mysqldump -u root -p -B -t db_namedb_name_not_create_info_$(date%F).sql案例六导出指定数据库的指定表mysqldump -u root -p 库名 --tables 表名db_name_表名_$(date%F).sql案例七导出指定数据库的多个表mysqldump -u root -p 库名 --tables 表名1 表名2 表3...db_name_tables_$(date%F).sql案例八压缩备份# 压缩备份mysqldump -u root -p -B 库名 --tables 表名|gzipdb_name_table_$(date%F).sql.gz## 解压恢复的两种方法# 方法1gzipdb_name_table_2025-12-17.sql.gz|mysql -u root -p mydatabase# 方法2zcat db_name_table_2025-12-17.sql.gz|mysql -u root -p mydatabase5、MySQL主从数据不一致的数据修复pt-table-sync 是 Percona 工具集里用于校验 / 同步 MySQL 主从数据不一致的工具# 目标端(从库)在前源端(主库)在参数中--sync-to-source 表示以源端为基准同步目标端# 验证pt-table-sync --sync-to-source\-u从库用户名 -p从库密码\h主库ip,D数据库名,t表名,u主库用户名,p主库密码\h从库ip\--print# 执行pt-table-sync --sync-to-source\-u从库用户名 -p从库密码\h主库ip,D数据库名,t表名,u主库用户名,p主库密码\h从库ip\--execute修复的时间比较长如果是上千万的数据大概需要半小时至一小时左右。需要注意的点–print会把差异数据打印出来如果数据比较多的话建议不要使用这个命令直接使用pt-table-checksum 工具来校验。6、pt-table-checksum 工具校验主从不一致的差异pt-table-checksum 是 Percona 工具集里用于校验 MySQL 主从数据一致性的工具仅检测不一致不修复会通过在主库执行校验和计算对比从库的结果输出具体哪些表 / 哪些行数据不一致pt-table-sync 则基于 pt-table-checksum 的校验结果精准修复主从数据差异以主库为基准同步从库。文末安装了 pt-online-schema-change 时会同步包含 pt-table-checksum 工具—— 因为这两个工具都属于 Percona Toolkit 核心组件官方打包时会将整个工具集作为一个整体发布而非单独拆分。第一步用 pt-table-checksum 校验数据不一致范围在从库上执行以下命令pt-table-checksum\--nocheck-replication-filters\# 不检查复制过滤规则避免漏检--no-check-binlog-format\# 不检查binlog格式兼容ROW/STATEMENT格式--replicatetest.checksum_results\# 校验结果存入主库 test 库的 checksum_results 表自动创建h主库IP,u校验账号,p密码,P3306\# 主库信息IP/账号/密码/端口-d 数据库名\# 指定要校验的数据库只校验该库不写则校验所有库-t 表名# 指定要校验的表只校验该表不写则校验库下所有表执行完命令后终端会输出校验结果核心字段解读DATABASE数据库名TABLE表名CHUNKS表被拆分的校验块数 -DIFFS不一致的块数大于 0 表示该表有数据不一致ROWS校验的总行数 对比主库 3000w、从库 2800w看是否匹配ERRORS 校验错误数 大于 0 需排查如权限、网络问题也可直接查询主库的校验结果表-- 主库执行查询不一致的表SELECTdb,tbl,diffsFROMtest.checksum_resultsWHEREdiffs0;第二步用 pt-table-sync 修复数据不一致# 先打印修复 SQL不执行验证准确性pt-table-sync\--sync-to-source\# 以主库source为基准修复从库数据--print\# 仅打印修复SQL不实际执行先核对--charsetutf8mb4\# 指定字符集避免乱码h主库ip,D数据库名,t表名,u主从同步的用户,p你的密码\# 主库源端信息h从库ip,u主从同步的用户,p你的密码\# 从库目标端信息# 执行修复确认 SQL 无误后pt-table-sync\--sync-to-source\--print\--charsetutf8mb4\h主库ip,D数据库名,t表名,u主从同步的用户,p你的密码\h从库ip,u主从同步的用户,p你的密码\–sync-to-source核心以 h192.168.0.1主库为基准同步 h192.168.0.2从库数据–print仅输出需要执行的 INSERT/UPDATE/DELETE 语句用于验证修复逻辑–execute执行修复 SQL务必先通过 --print 验证再执行注意事项数据量较大3000w的优化校验 / 修复时指定单表-t 表名避免全库操作耗时过久同时业务低峰期再去执行修复前确认从库的 IO/SQL 线程是 Running 状态show slave status\G校验 / 修复账号必须有主从库的 SELECT、UPDATE、DELETE、INSERT、SUPER 权限修复完成后重新执行 pt-table-checksum确认 DIFFS0无不一致三、如何安装pt-online-schema-change方式一通过percona-toolkit.tar.gz安装包解压安装# 下载wgetpercona.com/get/percona-toolkit.tar.gz# 解压tar-zvxf percona-toolkit.tar.gzcdpercona-toolkit-3.7.0-2# 安装perl依赖yuminstallperl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl Makefile.PL# 编译安装makemakeinstall# 验证pt-online-schema-change方式二RPM 包方式安装# 1. 从 Percona 官方镜像下载推荐wgethttps://downloads.percona.com/downloads/percona-toolkit/3.5.5/binary/redhat/7/x86_64/percona-toolkit-3.5.5-1.el7.x86_64.rpm# 备用链接阿里云镜像wgethttps://mirrors.aliyun.com/percona/yum/release/7/RPMS/x86_64/percona-toolkit-3.5.5-1.el7.x86_64.rpm# 2. 安装加 --force --nodeps 忽略依赖警告前提是已装完 Perl 依赖rpm-ivh percona-toolkit-3.5.5-1.el7.x86_64.rpm --force --nodeps# 3. 查看版本输出正常则安装完成pt-online-schema-change --version注意若 RPM 安装仍报错可直接解压 RPM 包将工具二进制文件放到系统路径这是在上面步骤安装失败的前提下# 1. 解压 RPM 包rpm2cpio../percona-toolkit-3.5.5-1.el7.x86_64.rpm|cpio -idmv# 2. 将工具拷贝到 /usr/bin系统可执行路径cp-r usr/bin/* /usr/bin/# 3. 赋予执行权限chmodx /usr/bin/pt-online-schema-change# 4. 验证pt-online-schema-change --version离线安装包下载地址如果是离线的系统说缺少依赖可以点击这个网址去下载https://mirrors.163.com/centos-vault/7.9.2009/os/x86_64/Packages/下载完成后通过执行rpm-ivh perl-Digest-1.17-245.el7.noarch.rpmrpm-ivh perl-Digest-MD5-2.52-3.el7.x86_64.rpm报错缺少perl-Digest-MD5包如果报错说缺少perl-Digest-MD5包那么就安装一下yum -y install perl-Digest-MD5四、其他其他的线上经验后续再分享了目前只想得起这么多哈哈…创作不易不喜勿喷。