MySQL 常用管理工具

时间:2022-09-22 08:19:24
1、 mysql(客户端连接工具)
--auto-rehash 开启自动补全功能,默认即开启。
-u, --user=name 指定用户名
-p, --password[=name] 指定密码
-h, --host=name 指定服务器IP 或者域名
-P, --port=# 指定连接端口
-S, --socket=name The socket file to use for connection.
-D, --database=name Database to use.
--default-character-set=charset-name 相当于在mysql 客户端连接成功后执行:set names charset;
-e, --execute=name 执行SQL 语句并退出
-E , --vertical 将输出方式按照字段顺序竖着显示
-s , --silent 去掉mysql 中的线条框显示
-f, --force 强制执行SQL
-v, --verbose 显示更多信息
--show-warnings 显示警告信息

2、 myisampack(MyISAM 表压缩工具)
myisampack 是一个表压缩工具,可以使用很高的压缩率来对MyISAM 存储引擎的表进行压2缩,使得压缩后的表占用比压缩前小得多的磁盘空间。但是压缩后的表也将成为一个只读表,不能进行DML 操作。
此工具的用法如下:shell> myisampack [options] filename

mysql> create table t2(id int,name varchar(10)) engine=myisam;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t2 values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> insert into t2 select * from t2; ##重复很多次
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
......

[root@db test]# ll t2.*
-rw-rw---- 1 mysql mysql 8586 Dec 14 06:13 t2.frm
-rw-rw---- 1 mysql mysql 209715200 Dec 14 06:15 t2.MYD
-rw-rw---- 1 mysql mysql 1024 Dec 14 06:15 t2.MYI
[root@db test]# myisampack t2
Compressing t2.MYD: (10485760 records)
- Calculating statistics
- Compressing file
90% ##可以看见压缩了90%
[root@db test]# ll t2.*
-rw-rw---- 1 mysql mysql 8586 Dec 14 06:13 t2.frm
-rw-rw---- 1 mysql mysql 20971589 Dec 14 06:15 t2.MYD
-rw-rw---- 1 mysql mysql 1024 Dec 14 06:17 t2.MYI

mysql> flush tables; ##flush tables之后,表就变为只读的了。
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t2 values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');
ERROR 1036 (HY000): Table 't2' is read only

3、 mysqladmin(MySQL 管理工具)
mysqladmin 是一个执行管理操作的客户端程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等。它的功能和mysql 客户端非常类似,主要区别在于它更侧重于一些管理方面的功能,比如关闭数据库。
mysqladmin 的用法如下:
shell> mysqladmin [options] command [command-options]
[command [command-options]] ...

##关闭数据库
mysqladmin -uroot -p -S /mydata/data/3306/mysql_3306.sock shutdown

4、 mysqlbinlog(日志管理工具)
mysqlbinlog 的具体用法如下:shell> mysqlbinlog [options] log-files1 log-files2...
option 有很多选项,常用的如下:
? -d, --database=name 指定数据库名称,只列出指定的数据库相关操作。
? -o, --offset=# 忽略掉日志中的前n 行命令
? -r, --result-file=name 将输出的文本格式日志输出到指定文件
? -s, --short-form 显示简单格式,省略掉一些信息
? --set-charset=char-name:在输出为文本格式时,在文件第一行加上set names char-name,这个选项在某些情况下装载数据时,非常有用。
? --start-datetime=name –stop-datetime=name:指定日期间隔内的所有日志
? --start-position=# --stop-position=#:指定位置间隔内的所有日志

5、 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—database
option 中有以下常用选项:
? -c, --check 检查表
? -r, --repair 修复表
? -a, --analyze 分析表
? -o, --optimize 优化表
其中,默认选项是-c(检查表)。
(1)检查表(check):
[root@CentOS 3306]# mysqlcheck -uroot -p -S /mydata/data/3306/mysql_3306.sock -c test
Enter password:
test.t1 OK
test.t2 OK
(2)修复表(repair):
[root@CentOS 3306]# mysqlcheck -uroot -p -S /mydata/data/3306/mysql_3306.sock -r test t4
Enter password:
test.t4 OK
(3)分析表(analyze):
[root@CentOS 3306]# mysqlcheck -uroot -p -S /mydata/data/3306/mysql_3306.sock -a test
Enter password:
test.t1
error : Table 'test.t1' is read only
test.t2
error : Table 'test.t2' is read only
test.t3 OK
test.t4 OK
(4)优化表(optimize)
[root@CentOS 3306]# mysqlcheck -uroot -p -S /mydata/data/3306/mysql_3306.sock -o test t4
Enter password:
test.t4 OK

6、 mysqldump(数据导出工具)
mysqldump 客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表或装载表的SQL 语句。mysqldump 目前是MySQL 中最常用的备份工具。
有3 种方式来调用mysqldump:
shell> mysqldump [options] db_name [tables] #备份单个数据库或者库中部分数据表
shell> mysqldump [options] ---database DB1 [DB2 DB3...] #备份指定的一个或者多个数据库
shell> mysqldump [options] --all—database #备份所有数据库
option 中有以下常用选项:
-u , --user=name 指定用户名
–p , --password[=name] 指定密码
–h , --host=name 指定服务器IP 或者域名
–P , --port=# 指定连接端口
--add-drop-database 每个数据库创建语句前加上DROP DATABASE 语句
--add-drop-table 在每个表创建语句前加上DROP TABLE 语句
-n, --no-create-db 不包含数据库的创建语句
-t, --no-create-info 不包含数据表的创建语句
-d, --no-data 不包含数据
--compact 选项使得输出结果简洁,不包括默认选项中的各种注释。
-c --complete-insert 选项使得输出文件中的insert 语句包括字段名称,默认是不包括字段名称的。
-e, --extended-insert 使用多行insert语句,默认即使用本参数。
-T 选项将指定数据表中的数据备份为单纯的数据文本和建表SQL 两个文件
--fields-terminated-by=name(字段分隔符);
--fields-enclosed-by=name(字段引用符);
--fields-optionally-enclosed-by=name(字段引用符,只用在char、varchar 和text 等字符型字段上);
--fields-escaped-by=name(转义字符);
--lines-terminated-by=name(记录结束符)。
--default-character-set=name 选项可以设置导出的客户端字符集。
-F --flush-logs(备份前刷新日志)。
-l --lock-tables(给所有表加读锁)。
-x, --lock-all-tables 锁定所有表,在备份过程中,该库无法进行读写操作。
--single-transaction 对于支持事务的存储引擎,在导出时会建立一个快照,保证导出数据的一致性,又不会堵塞其它会话,相比--lock-tables参数来说锁定粒度要低。
-A, --all-databases 导出所有数据库。information_schema库是不会被导出的。
-B, --databases 导出指定的某个/或者某几个数据库。通过--databases参数导出库中数据时,输出的内容是包含建库脚本的。
--master-data[=#] 在master端dump数据,指定参数值为1,则输出信息中包括CHANGE MASTER语句;如果值为2,则仍然输出CHANGE MASTER语句,但默认这个语句被注释。
--dump-slave[=#] 在slave端dump数据,指定参数值为1,则输出信息中包括CHANGE MASTER语句;如果值为2,则仍然输出CHANGE MASTER语句,但默认这个语句被注释。
-w, --where=name 只导出符合条件的记录。
-f, --force 遇到SQL错误,也继续执行。
--no-autocommit 禁用自动提交。
-R, --routines 导出存过、函数等。
--flush-privileges 导出mysql库后执行一条FLUSH PRIVILEGES语句。
--ignore-table=name 指定的表不导出。

7、 mysqlhotcopy(MyISAM 表热备份工具)
mysqlhotcopy 是一个Perl 脚本,它使用LOCK TABLES、FLUSH TABLES、cp 或scp 来快速备份数据库。它是备份数据库或单个表的最快途径,其缺点是mysqlhotcopy 只用于备份MyISAM,而且它需要运行在Linux/UNIX 环境中。
mysqlhotcopy 的用法如下:
shell> mysqlhotcopy db_name [/path/to/new_directory]
shell> mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
mysqlhotcopy 的常用选项如下。
? --allowold:如果备份路径下中含有同名备份,则将旧的备份目录rename 为目录名_old。
? --addtodest:如果备份路径下存在同名目录,则仅仅将新的文件加入目录。
? --noindices:不备份所有的索引文件。
? --flushlog:表被锁定后刷新日志。

8、 mysqlimport(数据导入工具)
mysqlimport 是客户端数据导入工具,用来导入mysqldump 加-T 选项后导出的文本文件。它实际上是客户端提供了LOAD DATA INFILEQL 语句的一个命令行接口。用法和LOAD DATAINFILE 子句非常类似
mysqlimport 的基本用法如下:
shell> mysqlimport [options] db_name textfile1 [textfile2 ...]
其中option 参数可以是以下选项:
? --fields-terminated-by=name(字段分隔符);
? --fields-enclosed-by=name(字段引用符);
? --fields-optionally-enclosed-by=name(字段引用符,只用在char、varchar 和text 等字符型字段上);
? --fields-escaped-by=name(转义字符);
? --lines-terminated-by=name(记录结束符);
? -- ignore-lines=number(或略前几行)

9、 mysqlshow(数据库对象查看工具)
mysqlshow 客户端对象查找工具,用来很快地查找存在哪些数据库、数据库中的表、表中的列或索引。和mysql 客户端工具很类似,不过有些特性是mysql 客户端工具所不具备的。
mysqlshow 的使用方法如下:
shell> mysqlshow[option] [db_name [tbl_name [col_name]]]
--count(显示数据库和表的统计信息)。
# mysqlshow -uroot -p -S /mydata/data/3306/mysql_3306.sock test --count

-k –keys(显示指定表中的所有索引)。
# mysqlshow -uroot -p -S /mydata/data/3306/mysql_3306.sock test t1 -k
和在mysql 客户端执行“show full columns from emp”和“show index from emp”的结果完全一致。

-i –status(显示表的一些状态信息)。
# mysqlshow -uroot -p -S /mydata/data/3306/mysql_3306.sock test t1 -i
此命令和mysql 客户端执行“show table status from test like 'emp'”的结果完全一致。

10、 perror(错误代码查看工具)
perror 的作用就是解释这些错误代码的详细含义。
perror 的用法很简单,如下所示:
perror [OPTIONS] [ERRORCODE [ERRORCODE...]]
mysql> select * from ttt;
ERROR 1146 (42S02): Table 'test.ttt' doesn't exist
[root@CentOS 3306]# perror 1146
MySQL error code 1146 (ER_NO_SUCH_TABLE): Table '%-.192s.%-.192s' doesn't exist

11、 replace(文本替换工具)
replace 是MySQL 自带的一个对文件中的字符串进行替换的工具,具体使用方法如下:
shell> replace from to [from to] ... -- file [file] ...
shell> replace from to [from to] ... < file
其中--表示字符串结束,文件的开始,可跟多个源文件,替换完毕后会覆盖原文件。<表示后面的文件作为输入,替换后的文本显示在标准输出上,不会覆盖原文件。
(1)将文件a 中的a1 和b1 分别替换为aa1 和bb1:[zzx@localhost ~]$ replace a1 aa1 b1 bb1 -- a
(2)将文件a 中的a 和b 分别替换为c 和d:[zzx@localhost ~]$ replace a c b d < a

12、 mysqldumpslow(分析慢查询日志)
如果慢查询日志中记录内容很多,可以使用mysqldumpslow 工具(MySQL 客户端安装自带)来对慢查询日志进行分类汇总。
[root@CentOS 3306]# mysqldumpslow CentOS-slow.log
对于SQL 文本完全一致,只是变量不同的语句,mysqldumpslow 将会自动视为同一个语句进行统计,变量值用N 来代替。这个统计结果将大大增加用户阅读慢查询日志的效率,并迅速定位系统的SQL 瓶颈。
注意:慢查询日志对于我们发现应用中有性能问题的SQL 很有帮助,建议正常情况下,打开此日志并经常查看分析。
MySQL自带了一些工具可以对日志进行分析,但这些工具相对功能较单一,而且对查询日志没有提供分析工具。有很多第三方工具,而mysqlsla是其中较广泛的一个。除了mysqlsla,还有一些常用日志分析工具,比如myprofi、mysql-explain-slow-log、mysqllogfilter等。