|
四、客户端管理工具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.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内的内容。
|
|