Linux环境下,MySQL在使用官方工具mysqldump逻辑备份方式进行库备份时,会给操作者一个特别不好的印象:不显式对导入过程进行刷屏。本文将讲述借助mysql的tee命令方式,对mysqldump的导出文件实现实时导入跟踪。
大家在操作命令时,都希望所执行命令能够回显执行过程,或者希望把这些执行过程以文件形式进行保存,以便后续跟踪排查。即在控制台上分析起来不方便。希望将结果导出到文件分析。
在mysql命令行中,有一个很有趣又很实用的小技巧:tee命令,可以记录语句和输出到指定文件。在debugging时会很有用。每执行一条语句,mysql都会讲执行结果刷新到指定文件。它将操作和输出的全部可视信息都保存进了一个文件里面,可以用来生成表格式的文件、报表制作、简单的备份。熟悉oracle的朋友可能想到mysql的tee命令类似于sqlplus的spool功能,可以将命令行中的结果保存到外部文件中。如果指定已经存在的文件,则结果会附加到文件中。
Tee命令用法示例:
在mysql命令行下,
开启命令:
mysql> tee /tmp/20191008.log
或
mysql> \T /tmp/20191008.log
此后所有操作和所有输出结果都将被记录下来。
使用notee命令来关闭日志记录
mysql> notee
Outfile disabled.
mysql> \t
Outfile disabled.
当调用mysql时,使用–tee参数,可以记录这个登录会话的全部日志。
#mysql -uroot -p --tee=/tmp/20160908_02.log
注意:
tee功能只在交互模式生效。即如果当前会话断开,则上述命令方式的反馈信息将不会再输出到外部文件。如果想使所有的会话都生效,怎么办?当然是写配置文件,在服务器上的/etc/my.cnf中的[client]加入 tee =/tmp/client_mysql.log即可。
先简单回顾下mysqldump的几种用法:
完全备份数据库中的一个表:
mysqldump -h192.168.0.110 -uusername -puserpswd dbname tablename>data_bck.sql
完全备份某个数据库:
mysqldump -h192.168.0.110 -uusername -puserpswd dbname tablename>data_bck.sql
完全备份所有数据库:
mysqldump -h192.168.0.110 -uusername -puserpswd --single-transaction --all-databases>data_bck.sql
完全备份所有数据库后停用以前所有增量日志并生成新日志:
mysqldump -h192.168.0.110 -uusername -puserpswd --single-transaction --flush-logs --master-data=2 --all-databases>data_bck.sql
完全备份所有数据库后删除以前所有增量日志并生成新日志:
mysqldump -h192.168.0.110 -uusername -puserpswd --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs>data_bck.sql
增量备份:
先执行完全备份,然后执行更新日志:
mysqladmin -h192.168.0.110 -uusername -puserpswd flush-logs
tee案例
用mysqldump进行数据库备份
$ /usr/local/bin/mysqldump --single-transaction --master-data=2 --flush-privileges --set-gtid-purged=off -S /tmp/mysql.sock -uroot -p --default-character-set=utf8mb4 -A -E -R --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats --triggers > /mysqldata/full_database_20191008.sql
导入过程跟踪
$/usr/local/bin/mysql -uroot -pPASSWORD
mysql>tee /mysqldata/full_database_20191008.sql
–此命令后,会将该会话下的所有命令回显至外部文件
mysql>\W
–执行导入命令
mysql>source /mysqldata/full_database_20191008.sql
在操作系统层面使用tail命令即可实时对上述日志进行跟踪。
$ tail -200f /mysqldata/full_database_20191008.sql
Tee命令介绍至此。
另,这里再介绍mysql的 pager命令。大家常常遇到当查询的表中数据行很多时,一页看不完时,可使用pager更改mysql的查询输出,如:
mysql> pager less;
mysql> select * from schema.tablename;
查询输出都是通过管道传给less命令,可以实现分页浏览
–即可回到标准输出stdout
mysql> nopager;
如下语句将输出发送到文件中:
mysql> pager cat>/home/pw/osq.txt;
less说明:
退出:“:q”
下一页:“F”
上一页:“B”
向前搜索
/ - 使用一个模式进行搜索,并定位到下一个匹配的文本
n - 向前查找下一个匹配的文本
N - 向后查找前一个匹配的文本
向后搜索
? - 使用模式进行搜索,并定位到前一个匹配的文本
n - 向后查找下一个匹配的文本
N - 向前查找前一个匹配的文本
【结语】
1.本文讲述了mysql的一个简单又使用的命令tee,该命令类似于oracle的spool,适用于debug问题、留存操作过程。
2.感兴趣的朋友可以动手尝试下,工具简单易用。
【参考】
1.https://www.cnblogs.com/jackluo/p/3365102.html