2. 不加任何参数,显示所有日志
注意:必须拥有访问目标文件的权限
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 [sudo] password for zj: /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #170920 20:44:49 server id 1 end_log_pos 123 CRC32 0x42fd5a4d Start: binlog v 4, server v 5.7.18-log created 170920 20:44:49 at startup ...... create table test2(id int,name varchar(30)) /*!*/; # at 1366 #170920 20:50:29 server id 1 end_log_pos 1431 CRC32 0x18a95938 Anonymous_GTID last_committed=6 sequence_number=7 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 1431 #170920 20:50:29 server id 1 end_log_pos 1509 CRC32 0x2fa8bd6c Query thread_id=4 exec_time=0 error_code=0 SET TIMESTAMP=1505911829/*!*/; BEGIN /*!*/; # at 1509 #170920 20:50:29 server id 1 end_log_pos 1622 CRC32 0x77ce6f3b Query thread_id=4 exec_time=0 error_code=0 SET TIMESTAMP=1505911829/*!*/; insert into test2 select * from t1.test1 /*!*/; # at 1622 #170920 20:50:29 server id 1 end_log_pos 1653 CRC32 0x41b7a45b Xid = 29 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
3. 加 -d 选项,将只显示 t2 数据库的操作日志
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -d t2 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; ...... SET TIMESTAMP=1505911829/*!*/; insert into test2 select * from t1.test1 /*!*/; # at 1622 #170920 20:50:29 server id 1 end_log_pos 1653 CRC32 0x41b7a45b Xid = 29 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
4. 加 -o 选项, 忽略掉前 20 行命令
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -o 20 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #170920 20:44:49 server id 1 end_log_pos 123 CRC32 0x42fd5a4d Start: binlog v 4, server v 5.7.18-log created 170920 20:44:49 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ' wWLCWQ8BAAAAdwAAAHsAAAABAAQANS43LjE4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAADBYsJZEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA AU1a/UI= '/*!*/; # at 1509 #170920 20:50:29 server id 1 end_log_pos 1622 CRC32 0x77ce6f3b Query thread_id=4 exec_time=0 error_code=0 use `t2`/*!*/; SET TIMESTAMP=1505911829/*!*/; SET @@session.pseudo_thread_id=4/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1436549152/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; insert into test2 select * from t1.test1 /*!*/; # at 1622 #170920 20:50:29 server id 1 end_log_pos 1653 CRC32 0x41b7a45b Xid = 29 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
5. 加 -r 选项,将上面的结果输出到文件 resultfile 中。
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -o 20 -r ./logfile zj@bogon:/usr/local/mysql/bin$ sudo more ./logfile /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; ...
6. 结果显示的内容较多,显得比较乱,加 -s 选项将上面的内容进行简单显示
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -o 20 -s /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; ROLLBACK/*!*/; use `t2`/*!*/; SET TIMESTAMP=1505911829/*!*/; SET @@session.pseudo_thread_id=999999999/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1436549152/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; insert into test2 select * from t1.test1 /*!*/; COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
7. 加 “--start-datetime --stop-datetime” 选项显示 5:00:00 ~ 5:01:00 之间的日志
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 --start-datetime="2017/09/30 05:00:00" --stop-datetime='2017/09/30 05:01:00'
开始日期和结束日期可以只写一个。如果只写开始日期,表示范围开始日期到日志结束;如果只写结束日期,表示日志开始到指定的结束日期。
8. --start-position=# 和 --stop-position=#, 与日期范围类似,不过可以更精确的表示范围。
sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 --start-position=4 --stop-datetime=100
五、mysqlcheck (myisam 表维护工具)
mysqlcheck 工具可以检查和修复 myisam 表,还可以优化和分析表。实际上,它集成了 mysql 工具中的 check、repair、analyze、optimize
有 3 种方式可以来调用 mysqlcheck:
shell> mysqlcheck [options] db_name [tables] shell> mysqlcheck [options] --database DB1 [DB2 DB3...] shell> mysqlcheck [options] --all-databse
option 中有以下常用选项:
-c, --check (检查表)
-r, --repair (修复表)
-a, --analyze (分析表)
-o, --optimize (优化表)
其中,默认选项是 -c (检查表)
示例:
1. 检查表
zj@bogon:/data/mysql$ mysqlcheck -c t2 t2.test1 OK t2.test2 OK
2. 修复表
zj@bogon:/data/mysql$ mysqlcheck -r t2 t2.test1 note : The storage engine for the table doesn't support repair t2.test2 OK
test1 表的存储引擎为 innodb,不支持 repair。
3. 分析表
zj@bogon:/data/mysql$ mysqlcheck -a t2 t2.test1 OK t2.test2 OK
4. 优化表
zj@bogon:/data/mysql$ mysqlcheck -o t2 t2.test1 note : Table does not support optimize, doing recreate + analyze instead status : OK t2.test2
六、mysqldump (数据导出工具)
mysqldump 客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表或装载表的 sql 语句。
有三中方式来调用 mysqldump:
mysqldump [OPTIONS] database [tables] // 备份单个数据库或者库中部分数据表 mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] //备份指定的一个或者多个数据库 mysqldump [OPTIONS] --all-databases [OPTIONS] // 备份所有数据库
1. 连接选项
-u, --user=name // 指定用户名
-p, --password[=name] // 指定密码
-h, --host=name // 指定服务器 IP 或者域名
-p, --port=# // 指定连接端口
示例:
shell> mysqldump -h192.18.10.10 -p3306 -uroot -p test > test.sql
2. 输出内容选项
--add-drop-database 每个数据库创建语句前加上 drop database 语句
--add-drop-table 在每个表创建语句前加上 drop table 语句
在默认情况下,这两个参数都自动加上。
-n, --no-create-db 不包含数据库的创建语句
-t, --no-create-info 不包含数据表的创建语句
-d, --no-data 不包含数据
3. 输出格式选项
--compact 选项使得输出结果简洁,不包括默认选项中的各种注释。
root@bogon:/usr/local/mysql/bin# ./mysqldump --compact t2 emp > emp.sql root@bogon:/usr/local/mysql/bin# more emp.sql /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(10) DEFAULT NULL, `context` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `emp` VALUES (1,'a','a'),(2,'b','b');
-c 或者 --complete-insert 选项使得输出文件中的 insert 语句包括字段名称,默认是不包括字段名称的。
root@bogon:/usr/local/mysql/bin# ./mysqldump -c --compact t2 emp > emp.sql root@bogon:/usr/local/mysql/bin# more emp.sql /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(10) DEFAULT NULL, `context` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `emp` (`id`, `name`, `context`) VALUES (1,'a','a'),(2,'b','b');
-T 选项将指定数据表中的数据备份为单纯的数据文本和建表 sql 两个文件,经常和下面几个选项一起配合使用,将数据导出为指定格式显示。
-T, --tab=name 备份数据和建表语句
--fileds-terminated-by=name 域分隔符
--fileds-enclosed-by=name 域引用符
--fileds-optionally-enclosed-by=name 域可选引用符
--fileds-escaped-by=name 转义字符
示例:将 t2 数据库中的表 emp 导出为单纯的数据文本和建表 sql 两个文件,并存放在当前路径下的 bak 目录下。
1.创建备份目录
root@bogon:/usr/local/mysql/bin# mkdir bak
2. 将 t2 数据库下的表 emp 备份到 bak 目录下
root@bogon:/usr/local/mysql/bin# ./mysqldump t2 emp -T ./bak
3. 查看 bak 目录,发现两个文件
root@bogon:/usr/local/mysql/bin# ls ./bak emp.sql emp.txt
4. 查看两个文件的内容, .sql 结尾的是建表及插入数据的sql,.txt 结尾的是表数据
root@bogon:/usr/local/mysql/bin# more ./bak/emp.sql -- MySQL dump 10.13 Distrib 5.7.18, for Linux (x86_64) -- -- Host: localhost Database: t2 -- ------------------------------------------------------ -- Server version 5.7.18-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `emp` -- DROP TABLE IF EXISTS `emp`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(10) DEFAULT NULL, `context` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2017-09-21 12:07:38
root@bogon:/usr/local/mysql/bin# more ./bak/emp.txt 1 a a 2 b b
4. 字符集选项
mysqldump 导出的数据的字符集使用的是 mysqld 启动时的默认字符集,如果表的字符集用的不是默认字符集,导出的数据就有可能出现乱码。所以在导出时,应该先确定表的字符集,在导出时指定该字符集即可。
shell> mysqldump -uroot --compact --default-character-set=utf8 t2 emp > emp.sql
5. 其他常用选项
-F --flush-logs (备份前刷新日志)
加上此选项后,备份前将关闭就日志,生成新日志。使得进行恢复的时候直接从新日志开始进行重做,大大方便了恢复过程。
-l --lock-tables (给所有表加读锁)
可以在备份期间使用,使得数据无法被更新,从而使备份的数据保持一致性,可以配合 -F 选项一起使用。
七、mysqlimport (数据导入工具)
mysqlimport 是客户端数据导入工具,用来导入 mysqldump 加 -T 选项后导出的文本文件。
基本用法:
shell> mysqlimport [options] db_name textfile1
八、mysqlshow (数据库对象查看工具)
mysqlshow 客户端对象查找工具,用来很快的查找存在哪些数据库,数据库中的表、表中的列或索引,和 mysql 客户端工具很类似,不过有些特性是 mysql 客户端工具所不具备的。
使用方法:
shell> mysqlshow [option] [db_name [tbl_name [col_name]]]
如果不加任何选项,默认情况下会显示所有数据库。
常用选项:
1. --count (显示数据库和表的统计信息)
如果不指定数据库,则显示每个数据库的名称、表数量、记录数量;
如果指定数据库,则显示指定数据库的每个表名、字段数量,记录数量;
如果指定具体数据库中的具体表,则显示表的字段信息。
2. -k 或者 --keys (显示指定表中的所有索引)
此选项显示了两部分内容,一部分是指定表的表结构,另一部分中是指定表的当前索引信息
3. -i 或者 --status (显示表的一些状态信息)
九、perror (错误代码查看工具)
在 MySQL 的使用过程中,可能会出现各种各样的 error。这些 error 有些是由于操作系统引起的,比如文件或者目录不存在;有些则是由于存储引擎使用不当引起的。这些 error 一般都有一个代码,类似于 “error:#” 或者 “Errcode:#”,“#” 代表具体的错误号。perror 的作用就是解释这些错误代码的详细含义:
perror [options] [errorcode [errorcode]] zj@bogon:/usr/local/mysql/bin$ perror 30 OS error code 30: Read-only file system zj@bogon:/usr/local/mysql/bin$ perror 60 OS error code 60: Device not a stream zj@bogon:/usr/local/mysql/bin$ perror 30 60 OS error code 30: Read-only file system OS error code 60: Device not a stream
总结
以上就是MySQL中的常用工具的实例总结的详细内容,更多请关注php中文网其它相关文章!
……