mysql实用三则:数据字典SQL、prompt配置与字符集乱码
前言
三个 mysql 日常高频小技巧:给新库整理数据字典、连接多个实例时防止在错误的库上执行 SQL、以及老库字符集不一致导致查询乱码的处理。
一、用 information_schema 生成数据字典
接手一个没有文档的数据库时,用 information_schema 可以一键导出数据字典。
1. 查询库下所有表
|
|
2. 查询字段明细
……一位Java开发者,喜欢研究技术,同时也在学习Golang和Python中,对服务器、Linux使用比较熟悉。欢迎添加技术交流QQ群:655158296
三个 mysql 日常高频小技巧:给新库整理数据字典、连接多个实例时防止在错误的库上执行 SQL、以及老库字符集不一致导致查询乱码的处理。
接手一个没有文档的数据库时,用 information_schema 可以一键导出数据字典。
1. 查询库下所有表
|
|
2. 查询字段明细
……mysql的表日积月累也会出现过千万的大表,有些历史数据可以定期归档清理的,保留最近的数据即可。但是delete table_name where id = ‘’;这种方式只是逻辑上的删除,不会释放表空间和索引的。因此需要在历史数据归档后做表分析才行
先远程备份,可以开发成shell脚本,设置crontab定期备份
……三个日常高频的数据库锁问题合在一起:mysql 里怎么查「谁锁了谁」、Oracle 的锁会话处理(附节)、以及 DELETE 大量数据后表空间为什么不回收、怎么回收。都是拿来就能用的 SQL。
1. 查询是否锁表
|
|
2. 查询当前进程(看哪些会话在跑、哪些在等待)
|
|
3. 查看正在锁的事务
……主从复制是 mysql 高可用的基础:读写分离、故障切换、异地备份都建立在它之上。这篇整理主从搭建的完整步骤、状态检查要点,以及复制中断后的几种恢复手段——生产环境主从挂掉大多是「中断后不知道怎么安全地恢复」,这部分才是重点。
1. 修改 my.cnf 开启 binlog
|
|
2. 重启后创建复制账号
……攒的一些 mysql 日常巡检命令和优化散记,合在一起记录。巡检部分用 show status/variables 就能完成,优化部分是建表和索引设计层面的经验,标注了适用版本。
|
|
调试 SQL 时比看客户端提示更全,写存储过程排查尤其有用。
……排查历史数据问题时经常要翻 binlog:某个时间段数据到底被谁改成了什么样。mysqlbinlog 只能把 binlog 转成可读文本,想要按语句聚合统计(哪类语句最多、耗时分布),用 percona toolkit 里的 pt-query-digest 加上 --type binlog 就能对转出来的结果做分析。我的环境是 centos,亲测可用。
不想装整套 percona toolkit 的话,单独装 pt-query-digest 就够了:
……收到数据库磁盘占比告警了
前提条件,磁盘采用lvm管理方式,做在线无损扩容才方便管理,其他方式没测试过
这个一般在磁阵或者云管理平台操作,不需要什么命令,一般都是图形化操作
|
|
个人建议第二个命令,2个命令都会返回一堆查询值,怎么判断谁是新盘,谁是已使用的盘,这点有运维经验的人还是不成问题的,不详说
……找到每日全量备份的数据,把订单表还原到测试库,然后单独把订单表重新备份,针对误删的表进行全量恢复 采用的工具是mydumper,非mysql官方的mydump 心想:好在有每日凌晨5点的全量备份,虽然在自己手里,从开发了每日全量备份脚本并配置定时任务每天执行,从来没派上用场,也希望不会派上用场,但是良好的备份意识还是挽救了90%的数据。 半小时左右,90%的数据恢复,然后把问题上报。
……Mydumper是一个针对MySQL和Drizzle的高性能多线程备份和恢复工具。开发人员主要来自MySQL,Facebook,SkySQL公司。性能比自带的mysqldump强劲
github: https://github.com/mydumper/mydumper
redhat、centos举例
|
|
|
|
|
|
|
|
|
|
|
|
| 参数 | 说明 |
|---|---|
| -B | –database 要导出的dbname |
| -T | –tables-list 需要导出的表名,导出多个表需要逗号分隔,t1[,t2,t3 ….] |
| -o | –outputdir 导出数据文件存放的目录,mydumper会自动创建 |
| -s | –statement-size 生成插入语句的字节数, 默认1000000字节 |
| -r | –rows Try to split tables into chunks of this many rows. This option turns off –chunk-filesize |
| -F | –chunk-filesize 切割表文件的大小,默认单位是 MB ,如果表大于 |
| -c | –compress 压缩导出的文件 |
| -e | –build-empty-files 即使是空表也为表创建文件 |
| -x | –regex 使用正则表达式匹配 db.table |
| -i | –ignore-engines 忽略的存储引擎,多个值使用逗号分隔 |
| -m | –no-schemas 只导出数据,不导出建库建表语句 |
| -d | –no-data 仅仅导出建表结构,创建db的语句 |
| -G | –triggers 导出触发器 |
| -E | –events 导出events |
| -R | –routines 导出存储过程和函数 |
| -k | –no-locks 不执行临时的只读锁,会导致备份不一致 。 WARNING: This will cause inconsistent backups –less-locking 最小化在innodb表上的锁表时间 –butai |
| -l | –long-query-guard 设置长时间执行的sql 的时间标准 |
| -K | –kill-long-queries 将长时间执行的sql kill |
| -D | –daemon 以守护进程的方式执行 |
| -I | –snapshot-interval 创建导出快照的时间间隔,默认是 60s ,该参数只有在守护进程执行的时候有用。 |
| -L | –logfile指定mydumper输出的日志文件,默认使用控制台输出。 –tz-utc SET TIME_ZONE=’+00:00’ at top of dump to allow dumping of TIMESTAMP data when a server has data in different time zones or data is being moved between servers with different time zones, defaults to on use –skip-tz-utc to disable. –skip-tz-utc –use-savepoints 使用savepoints 减少MDL 锁事件 需要 SUPER 权限 –success-on-1146 Not increment error count and Warning instead of Critical in case of table doesn |
| 参数 | 说明 |
|---|---|
| -d | –directory 备份文件的文件夹 |
| -q | –queries-per-transaction 每次事物执行的查询数量,默认是1000 |
| -o | –overwrite-tables 如果要恢复的表存在,则先drop掉该表,使用该参数,需要备份时候要备份表结构 |
| -B | –database 需要还原的数据库 |
| -e | –enable-binlog 启用还原数据的二进制日志 |
| -h | –host The host to connect to |
| -u | –user Username with privileges to run the dump |
| -p | –password User password |
| -P | –port TCP/IP port to connect to |
| -S | –socket UNIX domain socket file to use for connection |
| -t | –threads 还原所使用的线程数,默认是4 |
| -C | –compress-protocol 压缩协议 |
| -V | –version 显示版本 |
| -v | –verbose 输出模式, 0 = silent, 1 = errors, 2 = warnings, 3 = info, 默认为2 |
metadata文件存储了binlog位置点和备份开始结束的时间
……如果不使用最新版本的mysql,但是低版本的mysql官方不提供编译好的安装包,只能自己编译安装了。以下步骤和参数针对5.6、5.7生效,新版本有变动请阅读官方文档介绍。
版本停更提示:5.6 已于 2021-02、5.7 已于 2023-10 结束官方支持(EOL),两者均不再有安全补丁,新项目请直接上 8.0/8.4 LTS。老库升级前注意 8.0 的行为差异:
……