MySQL之部分工具

别说谁变了你拦得住时间么 提交于 2020-01-20 19:39:59
  • mysqlimport

语法:mysqlimport [options] db_name textfile1 [textfile2 ...]

语义:以命令行模式来载入SQL声明。对于每个textfile,mysqlimport都将该文件名(后缀除外)作为数据库中的表。

选项:

--columns=column_list, -c column_list:以逗号作为分隔,列出对应的列名。载入文件中的数据以该列名作为表的列名。

--delete, -D:导入数据之前是否清空表格。

--force, -f:是否忽略出错。

--ignore-lines=N:忽略文件的前N行。

--lines-terminated-by=...:以xxx作为文件的结尾,mysqlimport遇到该字符串时结束导入。

--local, -L:默认导入时,导入的文件位于mysql的server端,本选项指定从客户端的虚机上导入数据。

--lock-tables, -l:在导入之前锁定所有的表格。

--low-priority:导入数据时以低优先级进行。这个仅在支持表级锁的存储引擎上有效。

--replace, -r/--ignore:指示在已经存在的表中有相同记录时,导入是覆盖还是忽略。如果没有指定,那么存在相同记录时,将会出错,后续的记录也不会继续导入。

--silent, -s:静默模式,出现错误时显示错误信息。

--use-threads=N:并行使用N个线程进行数据导入。

  • mysqlpump

语法:

mysqlpump --all-databases

默认mysqlpump导出所有的数据库,也可以用--all-databases显式指定。

mysqlpump db_name

导出单个数据库

mysqlpump db_name tbl_name1 tbl_name2 ...

导出某个数据库中的表

mysqlpump --databases db_name1 db_name2 ...

导出指定数据库

mysqlpump --exclude-databases=% --users

导出mysql的用户账户表(默认不能导出),%表示匹配所有的数据库;--users表示抑制所有数据库的导出。

mysql < xxx.sql  (--result-file=xxx.sql)

从dump文件中导入

语义:一个数据库备份工具,其选项可以在命令行中指出,也可以在配置文件中[mysqlpump]和[client]组中指出。它执行逻辑备份,将源数据库生成一系列的SQL语句,然后可以利用这些语句在新数据库中重新产生与源数据库一样的数据和表格。它可以备份数据库,也可以转换到别的SQL server中。mysqlpump在导出表时,它至少需要SELECT权限。导出视图(view)时,需要SHOW View权限;导出触发器时,需要TRIGGER权限;如果--single-transaction选项打开那么还需要LOCK TABLES权限。当然,其他不同的选项可能需要不同的权限。

选项:

--add-drop-database:在创建数据库之前先执行Drop Datbase。

--add-locks:在dump表时用LOCK TABLES 和UNLOCK TABLES声明包围,这样在后续的文件导入时将更快。

  • mysqldumpslow

语法:mysqldumpslow [options] [log_file ...]

语义:mysqldumpslow将相似的查询组合在一起,mysqldumpslow解析慢查询日志文件并且汇总它们的内容。

选项:

-a:不要将所有的数字抽象成N,所有的字符串抽象成S;

-g pattern:只考虑满足模式(grep style)的查询;

-l:不要将lock time从total time中减去。

-r:以反序方式;

-s sort_type:按type指定的类型排序;

-t:仅显示前面N个查询;

  • mysqlbinlog

语法:mysqlbinlog [options] log_file ...

语义:一个可以从二进制binlog文件中读取声明的工具,mysql server在数据库数据变更时,它会记录到bin log中。这些变更简称为events。bin log文件记录的是一系列修改数据库的事件,我们可以使用mysqlbinlog工具读取mysql server的bin log文件,也可以读取mysql slave server的relay log文件。

选项:

--database=db_name, -d db_name:指定数据库名字,存在多个名字时,使用最后一个。本选项在bin log的不同存储格式下有不同的意义:

a、基于SQL语句的模式:必须在SQL语句中使用USE指示db_name,这样后面的那些事件才可以被工具解析到。

b、基于行模式:工具仅解析那些属于db_name的表的事件。

--force-if-open, -F:强制读那些即使没有关闭的文件。

--force-read, -f:强制读不认识的文件。

--offset=N, -o N:跳过签名N个事件。

--open-files-limit=N:指定保留多少个文件描述符。

--raw:默认情况下,工具输出为文本模式,使用本选项指示以二进制模式输出。这种模式可以用来备份server的bin log文件。联同--stop-never选项时,表示在线备份。

--read-from-remote-server, -R:指定从远程机器读取bin log,工具默认是在本地读取。

--result-file=name, -r name:用来指定输出的bin log文件名字。

--server-id=id:仅显示那些属于server-id等于<id>的事件。

--start-datetime=datetime/--stop-datetime=datetime:指定工具读取bin log文件中第一个事件的时间大于等于这个起始时间的所有事件。

--start-position=N, -j N/--stop-position=N:从第N个事件开始/结束进行解析。

--stop-never:永远不停止。如果不指定,工具在解析完成之后,它会退出。

--to-last-log, -t:继续解析直到最后一个bin log文件。如果把工具的输出追加到当前的server中,那么可能导致死循环。

 

恢复数据的几种方法:

a、用户可以将工具的输出作为mysql client的输入(pipe模式),主要client就可以执行那些事件。这种方法可以用来恢复在server出现crash时的数据。例如:

mysqlbinlog binlog.000001 | mysql -u root -p

如果bin log文件中有blob数据,client可能会出现错误,这时可以在client中使用--binary-mode选项。

b、用户可以将bin log以文本方式输出到文件,然后编辑这些文件,最后再导入到mysql

mysqlbinlog binlog.000001 > tmpfile

... edit tmpfile ...

mysql -u root -p < tmpfile

c、如果存在多个bin log文件时,可以使用如下方式:

mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

d、如果工具处理一个非常大的bin log文件,这时可能会出现磁盘空间不够,用户可以通过TMPDIR环境变量配置临时目录用于存放工具产生的临时文件。

或者

mysqlbinlog binlog.000001 > /tmp/statements.sql

mysqlbinlog binlog.000002 >> /tmp/statements.sql

mysql -u root -p -e "source /tmp/statements.sql"

  •  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!