首页 > 代码库 > 细聊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-defaultsRead 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.45.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-tableadd-drop-table 反向操作

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

--skip-commentscomments 反向操作

--skip-compactcompact 反向操作

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

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

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

--skip-quickquick 反向操作

--skip-quote-namesquote-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内的内容。

本文出自 “架构师之路” 博客,请务必保留此出处http://wangweiak47.blog.51cto.com/2337362/1586307

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