细聊MySQL之常用工具及基本操作(一)

细聊MySQL之常用工具及基本操作(二)

细聊MySQL之常用工具及基本操作(三)

细聊MySQL之常用工具及基本操作(完)


四、客户端管理工具mysqlcheck的使用。mysqlcheck是客户端表维护工具,可以检查、修复、优化或分析表。

如 shell> mysqlcheck databasename tablename [options]

databasename为数据库名

tablename为表名

如果你只指定databasename,通常会检查databasename下所有的表。如果你既不指定databasename,也不指定tablename,那么一定要添加参数--all-databases,否则系统会不知道检查哪个数据库。参数的作用已经写在表格内,请大家参看。

--all-databases 检查所有数据库中的所有表是否正常
--analyze 分析表是否正常
--auto-repair 如果表损坏,自动修复
--bind-address=ip_address 同mysql命令
--character-sets-dir=path 同mysql命令
--check 检查表的错误
--check-only-changed 只检查自上次检查后改变的地方
--compress 同mysql命令
--databases 处理所有在命令行上指定的数据库
--debug[=debug_options] 写debug日志
--debug-check 同mysql命令
--debug-info 同mysql命令
--default-character-set=charset_name 同mysql命令
--defaults-extra-file=file_name 同mysql命令
--defaults-file=file_name 同mysql命令
--defaults-group-suffix=str 同mysql命令
--extended 检查并且修复表
--fast 检查没有被正常关闭的表
--force 同mysql命令
--help 同mysql命令
--host=host_name 同mysql命令
--medium-check 比--extended更快的操作
--no-defaults Read no option files
--optimize 优化表
--password[=password] 同mysql命令
--port=port_num 同mysql命令
--print-defaults 同mysql命令
--protocol=type 同mysql命令
--quick 最快速检查表
--repair 修复表错误,但不能修复唯一约束内有不唯一的值的情况
--silent 同mysql命令
--socket=path 同mysql命令
--ssl 同mysql命令
--ssl-ca=file_name 同mysql命令
--ssl-capath=dir_name 同mysql命令
--ssl-cert=file_name 同mysql命令
--ssl-cipher=cipher_list 同mysql命令
--ssl-crl=file_name 同mysql命令
--ssl-crlpath=dir_name 同mysql命令
--ssl-key=file_name 同mysql命令
--ssl-verify-server-cert 同mysql命令
--tables 覆盖--databases选项
--use-frm 修复MyISAM引擎表
--user=user_name, 同mysql命令
--verbose 同mysql命令
--version 同mysql命令
--write-binlog 记录ANALYZE, OPTIMIZE, REPAIR到binlog

它有以下参数可供选择:

mysqlcheck的例子:/usr/local/mysql/bin/mysqlcheck --databases test  --auto-repair  --user=root --host=127.0.0.1 自动修复test库内的表。


五、数据库备份工具mysqldump的使用。mysqldump需要select权限以备份表,需要show view权限以备份视图,需要trigger权限以备份触发器。mysqldump能生成csv、文本、XML等格式。

    mysqldump的优点是方便和灵活,并且在恢复前可以做一定的自定义修改。但它在速度方面和可扩展性方面不是很强。如果需要备份大数据,mysqldummp不是一个好的解决方案,恢复数据会非常慢。对于高扩展的备份与恢复,物理备份是更好的选择。

    mysqldump语法如下

    shell> mysqldump [options] db_name [tbl_name ...]或

    shell> mysqldump [options] --databases db_name ...或

    shell> mysqldump [options] --all-databases


    参数如下表所示:

参数 描述 适用 弃用
--add-drop-database 在每个 CREATE DATABASE 声明前加上DROP DATABASE 声明

--add-drop-table 在每个 CREATE TABLE  声明前加上DROP TABLE 声明

--add-drop-trigger 在每个 CREATE TRIGGER  声明前加上DROP TRIGGER 声明

--add-locks 在备份时所表

--all-databases 备份所有数据库里的所有表

--allow-keywords 将表名作为列名的前缀

--apply-slave-statements 将STOP SLAVE放在CHANGE MASTER声明前,并将START SLAVE放在结尾

--bind-address=ip_address 同mysql命令

--comments 增加注释到备份文件

--compact 生成更加紧凑的输出

--compatible=name[,name,...] 生成更加兼容的格式

--complete-insert 使用完整的 INSERT 声明

--create-options 在CREATE TABLE声明里包含所有的MySQL指定选项

--databases 备份指定的数据库

--debug[=debug_options] 写debug日志

--debug-check 同mysql命令

--debug-info 同mysql命令

--default-auth=plugin 同mysql命令

--default-character-set=charset_name 同mysql命令

--defaults-extra-file=file_name 同mysql命令

--defaults-file=file_name 同mysql命令

--defaults-group-suffix=str 同mysql命令

--delete-master-logs 在执行dump操作后删除master节点的binlog

--disable-keys 对于每一个表的INSERT声明前加上/*!40000 ALTER TABLE tbl_name DISABLE KEYS */; 和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */,这样可以更快的载入dump文件,但仅仅对具有非唯一索引的MyISAM表有效。

--dump-date 包含dump时间

--flush-logs 在开始导出前刷新MYSQL server日志文件

--flush-privileges 在导出后刷新权限

--help 同mysql命令

--hex-blob 使用16进制导出二进制列

--host 同mysql命令

--ignore-error=error[,error]... 跳过指定的错误 5.7.1
--ignore-table=db_name.tbl_name 不导出指定的表

--insert-ignore 写INSERT IGNORE 声明,而不是 INSERT 声明

--lock-all-tables 锁所有的数据库表

--lock-tables 导出前锁数据库内的表

--log-error=file_name 追加错误日志到指定文件

--login-path=name 同mysql命令

--max_allowed_packet=value 同mysql命令

--net_buffer_length=value 同mysql命令

--no-autocommit 添加 SET autocommit = 0 和COMMIT 声明在每个  INSERT 声明前

--no-create-db 不创建 CREATE DATABASE 声明

--no-data 不导出表的数据

--no-defaults 同mysql命令

--no-set-names 不设置字符集

--no-tablespaces 不写任何 CREATE LOGFILE GROUP 或 CREATE TABLESPACE 声明

--opt --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset的缩写

--order-by-primary 按逐渐或唯一索引排序导出数据行

--password[=password] 同mysql命令

--port=port_num 同mysql命令

--print-defaults 同mysql命令

--protocol=type 同mysql命令

--quick 一次检索一行,而不分析每行的内容

--quote-names 添加引用标识

--replace 用 REPLACE 声明代替 INSERT 声明

--result-file=file 输出文件到指定位置

--secure-auth 同mysql命令 5.7.4 5.7.5
--set-charset 设置字符集

--set-gtid-purged=value 增加 SET @@GLOBAL.GTID_PURGED 

--shared-memory-base-name=name 同mysql命令

--single-transaction 在导出前写 BEGIN SQL 声明

--skip-add-drop-table add-drop-table 反向操作

--skip-add-locks add-locks 反向操作

--skip-comments comments 反向操作

--skip-compact compact 反向操作

--skip-disable-keys disable-keys 反向操作

--skip-extended-insert extended-insert 反向操作

--skip-opt 关闭 --opt 选项

--skip-quick quick 反向操作

--skip-quote-names quote-names 反向操作

--skip-set-charset 不设置字符集

--skip-triggers 不导出触发器

--skip-tz-utc 关闭 tz-utc 选项

--socket=path 同mysql命令

--ssl 同mysql命令

--ssl-ca=file_name 同mysql命令

--ssl-capath=dir_name 同mysql命令

--ssl-cert=file_name 同mysql命令

--ssl-cipher=cipher_list 同mysql命令

--ssl-crl=file_name 同mysql命令

--ssl-crlpath=dir_name 同mysql命令

--ssl-key=file_name 同mysql命令

--ssl-verify-server-cert 同mysql命令

--tab=path 生成一个用tab隔开的数据文件。

--tables 覆盖 --databases 选项

--triggers 导出触发器

--tz-utc 针对列中的TIMESTAMP字段,增加SET TIME_ZONE='+00:00'到导出文件中

--user=user_name 同mysql命令

--verbose 同mysql命令

--version 同mysql命令

--where='where_condition' 导出符合where条件的行

--xml 生成XML输出

mysqldump的操作很简单,用的最多的就是/usr/local/mysql/bin/mysqldump test --skip-comments --opt > backup.sql --opt这个选项,使用--opt这个选项代表同时使用了

--add-drop-table 在create前先drop

--add-locks 导出前加lock table,完成后加unlock table

--create-options 包含所有create语句声明选项

--disable-keys 使键约束失效

--extended-insert 使用多行插入语句

--lock-tables 对表加读锁

--quick 一次检索一行

--set-charset 设置字符集

使用这个设置可以保证数据的完整性,在效率上也有一定保证。


六、mysqlimport工具的使用,mysqlimport为数据导入操作,能将文本数据导入到数据库内。

    语法如下:

    shell> mysqlimport [options] db_name textfile1 [textfile2 ...]


    注意:它并不是针对mysqldump的,而是针对文本数据文件的。

    下面举个例子:

    首先在test库里创建表:

    shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test

    然后创建文本 data.txt,文本内容为


    100[tab]Max Sydow[回车]

    101[tab]Count Dracula

    然后调用mysqlimport

    shell> mysqlimport --user=root --host=127.0.0.1 test imptest.txt

    注意:数据文件名应与表名一致。

    操作完成后,imptest表里会有两行数据,数据内容为刚才data.txt内的内容。