文章目录
MySQL常用工具使用命令
一、mysqlbinlog(日志管理工具)
mysqlbinlog /home/mysql/mysqllog/binlog/mysql-binlog.000005 -v -o 1 --start-datetime='2020-01-15 2:27:17' --stop-datetime='2020-01-15 2:27:52' -r result.out
mysqlbinlog /home/mysql/mysqllog/binlog/mysql-binlog.000005 -v --start-position=896 --stop-position=1012
常用选项
# -d,--database=name 指定数据库名称,只列出指定数据库的相关操作
# -o,--offset=n 忽略日志中前 n 行命令
# -r,--result-file=name 输出到指定文件
# -s,--short-form 显示简单格式
# -v,--verbose 重构日志格式为 row 模式下的虚拟 SQL 语句
# --start-datetime='2020-01-15 2:27:17' --stop-datetime='2020-01-15 2:27:52' 指定日期间隔内的所有日志
# --start-position=896 --stop-position=1012 指定位置间隔内的所有日志
二、mysqlcheck(表维护工具)
mysqlcheck -uroot -p -S /home/mysql/mysql.sock -B sakila
常用选项
# --check 检查表是否有错误,默认选项
# --databases,-B 检查指定数据库下的所有表。一般 mysqlcheck 把命令行的第一个名字识别为数据库名,后面的名字识别为表名。使用这个参数后,所有的名字都将识别为数据库名
# --force,-f 忽略发现的错误,继续执行后续操作
# --optimize,-o 优化表
# --repair, -r 修护表。除了不能修护主键有重复数据,几乎能修复其他所有问题
# --tables 覆盖--databases,这个选项后面的所有的名字都将被识别为表名。
# --write-binlog 默认开启,开启这个选项后 mysqlcheck 生成的分析表、优化表和修护表语句将记录到二进制日志中。
# --skip-write-binlog 进行 mysqlcheck 生成的分析表、优化表和修护表语句将不记录二进制日志。
三、mysqldump(数据导出工具)
mysqldump -uroot -p -S /home/mysql/mysql.sock --compact --complete-insert test > test.sql
mysqldump -uroot -p -S /home/mysql/mysql.sock test t2 -T /home/mysql/tmp/tmpSql
常用选项
# --add-drop-database 每个数据库创建语句前加上 DROP DATABASE 语句
# --add-drop-table 每个表创建语句前加上 DROP TABLE 语句
# -n,--no-create-db 不包含数据库的创建语句
# -t,--no-create-info 不包含数据表的创建语句
# -d,--no-data 不包含数据
# --cpmpact 简洁输出
# -c,--complete-insert 输出文件中的 insert 语句包括字段名称,默认不包括
# -T,--tab=name 备份数据表中的数据为单纯的数据文本和建表 SQL 两个文件
# --default-character-set=name 设置导出的客户端字符集(如果数据库字符集和客户端字符集不一致,需要设置此选项)
# -F,--flush-logs 备份前刷新日志
# -l,--lock-tables 给所有的表加读锁
# --set-gtid-purged OFF恢复时会记录binlog日志;如果不加或ON恢复时不记录binlog日志。
# --master-data=2 在bin-log日志里记录备份到了哪个位置
#使用 mysqldump -T 报错
mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so
it cannot execute this statement when executing 'SELECT INTO OUTFILE'
#解决方法
当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
在 mysql.cnf 中的 [mysqld] 加入 secure_file_priv =
四、mysqlpump(并行的数据导出工具)
mysqlpump -uroot -p -S /home/mysql/mysql.sock -A --compress-output=LZ4> backup.lz4
#解压
lz4 -d backup.lz4
mysqlpump -uroot -p -S /home/mysql/mysql.sock -A --parallel-schemas=10:test,sakila --default-parallelism=3 --watch-progress > backup_pump.sql
mysqlpump -uroot -p -S /home/mysql/mysql.sock -d --users -B test > back
常用选项
# --add-drop-user 每个 create user 命令前,记录 drop user 命令
# --compress-output=algorithm 压缩结果文件,默认不开启。支持 LZ4(速度快,大约5倍),和 ZLIB(压缩率高,大约10倍)压缩算法
# --default-parallelism=n 默认并行线程数,默认值是 2
# --default-table-indexes 导出文件先记录建表语句,再记录 insert 语句,最后创建二级索引
# --include-databases=db_list 导出数据库的列表,用逗号分隔
# --include-tables=table_list 导出表的列表,用逗号分隔
# --include-users=user_list 导出用户的列表,用逗号分隔
# --parallel-schemas=[N:]db_list 创建一个队列,用于导出数据库列表的表。如果指定 N 值,那么这个队列将开启 N 个线程;如果 N 未指定,那么将用 --default-parallelism 指定的值作为默认线程数
# --users 以 create user 和 grant 语法导出用户
# --watch-progress 显示导出进度,使用 --skip-watch-progress 关闭显示进度
五、mysqlshow(数据库对象查看工具)
#不加选项,默认显示所有数据库
mysqlshow -uroot -p -S /home/mysql/mysql.sock
# --count 显示数据库和表的统计信息
#如果不指定数据库,则显示每个数据库的名称、表数量、记录数量
#如果指定数据库,怎显示数据库的每个表名、字段数量、记录数量
#如果指定具体数据库中的具体表,则显示表的字段信息
mysqlshow -uroot -p -S /home/mysql/mysql.sock --count test t2
# -k,--keys 显示指定表中的所有索引
mysqlshow -uroot -p -S /home/mysql/mysql.sock --count test t2 -k
#等同于
show full columns from test.t2;
show index from test.t2;
# -i,--status 显示表的状态信息
mysqlshow -uroot -p -S /home/mysql/mysql.sock -i test t2
#等同于
show table status from test like 't2';