1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > MySQL-快速入门(12)备份 还原

MySQL-快速入门(12)备份 还原

时间:2019-09-11 04:18:52

相关推荐

MySQL-快速入门(12)备份 还原

1、数据备份

1》使用MySQLdump命令备份(主要的方式)

//备份数据库中某张表(去掉表的限定,就是备份指定数据库)

//备份脚本可以重新创建表及插入数据

mysqldump -u user -h host -p pwd dbname [tbname[,tbname...]] > filename.sql

C:\Users\lfy>mysqldump -uroot -h localhost -p12345 mybatis test > C:\Users\lfy\Desktop\mybatis.test_09072320.sqlmysqldump: [Warning] Using a password on the command line interface can be insecure.C:\Users\lfy>

//备份多个数据库,使用空格隔开mysqldump -u user -h host -p pwd --databases [database[ database...]] > filename.sql

//备份所有数据库

mysqldump -u user -h host -p pwd --all-databases > filename.sql

//如果所有表均为MyISAM表,应该考虑使用MySQLhotcopy备份或者恢复,将会更快速。

MySQLdump还有常用的选项:--opt:该选项将打开--quick、--add-locks、--extended-insert等多个选项。使用该选项可以提供最快速的数据库转储。--add-drop-database:在每个create database语句前添加drop database语句。--add-drop-tables:在每个create table语句前添加drop table语句。--add-locking:用lock tables和unclock tables语句引用每个表转储。重载转储文件时插入得更快。--all--database,-A:转储所有数据库中的所有表。与使用--database选项相同,在命令行中命名所有数据库。--comments[=0|1]:如果设置为0,禁止转储文件中的其他信息,例如程序版本、服务器版本和主机。--skip-comments与--comments=0的结果相同。默认值为1,既包括额外的信息。--compact:产生少量输出。该选项禁用注释并启用--skip-add-drop-tables、--no-set-names、--skip-disable-keys、--skip-add-locking。...

运行:mysqldump --help获取更多选项信息。

2》直接复制整个数据库目录

因为MySQL表保存文件方式,所以可以直接复制MySQL数据库的存储目录及文件进行备份。但这种方法对InnoDB存储引擎的表不适用。还要注意不同版本数据库的数据格式问题。

3》使用MySQLhotcopy工具快速备份

MySQLhotcopy是一个Perl脚本,它使用Lock Tables、Flush Tables和cp或scp来快速备份数据库。它是备份数据库或者单个表的最快途径,但它只能运行在数据库目录所在的机器上,并且只能备份MyISAM类型的表。MySQLhotcopy运行在Unix系统中。

mysqlhotcopy db_name_1,...db_name_n /path/to/new_dirctory

2、数据还原

1》使用MySQL命令恢复

//针对备份的sql文件中包含create、insert、dropmysql -u user -p pwd [dbname] < filename.sql

//如果已经登录数据库,可以使用以下方式导入脚本文件source filename

mysql> drop table test;Query OK, 0 rows affected (0.01 sec)mysql> source C:\Users\lfy\Desktop\mybatis.test.sqlQuery OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)...

2》直接复制到数据库目录

要求复制的主版本号相同,仅对MyISAM类型的表有效。

3》MySQLhotcopy工具快速恢复

chown -R mysql.mysql /var/lib/mysql/dbname

3、表的导入和导出

1》使用select...into outfile ‘filename’导出文本文件

在指定的服务器需要有写入权限。filename文件不能已存在。

select column_list from tb_name where condition into outfile 'filename' [options]options包括fields和lines子句:

fields和lines两个子句都是自选的,但是如果两个都被指定了,fileds必须位于lines的前面。在服务器主机外的客户主机上创建结果,应该在客户主机上使用如“MySQL -e "select ..." > filename”的命令来生成文件。

select...into outfile是load data infile的补语。用于语句的options部分的语法包括部分fields和lines子句,这些子句与load data infile语句同时使用。

mysql> select * from test into outfile "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\test0.txt";Query OK, 6 rows affected (0.00 sec)mysql> select * from test into outfile "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\test1.txt"-> fields-> terminated by ','-> enclosed by '\"'-> escaped by '\''-> lines-> terminated by '\r\n';Query OK, 6 rows affected (0.02 sec)mysql>

说明:上面的输出格式限定为以","逗号分隔各字段,以"\""双引号包围字段,以“\'”单引号作为转义字符,每行结尾以\r\n结束。

2》使用MySQLdump命令导出文本文件

mysqldump -T path -u user -p pwd dbname [tables] [options]--options选项:--fields-terminated-by=value--fields-enclosed-by=value--fields-optionally-enclosed-by=value--fields-escaped-by=value--lines-terminated-by=value

只有指定了-T参数才可以导出纯文本文件;path指示导出文件的路径;tables不指定将导出指定数据库的所有表。

[options]参数需要结合-T选项使用。

C:\Users\lfy>mysqldump -T C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads mybatis test -uroot -pEnter password: ****mysqldump: Got error: 1049: Unknown database 'server' when selecting the databaseC:\Users\lfy>mysqldump -T "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads" mybatis test -uroot -pEnter password: ****C:\Users\lfy>

mysqldump针对路径中有空格,可以对路径使用双引号括起来,也可以使用~1替换的形式。使用mysqldump进行备份数据,会同时产生两个文件,一个sql文件,一个指定的txt文件。

使用[options]:

C:\Users\lfy>mysqldump -T "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads" mybatis test -uroot -p --fields-terminated-by=, --fields-optionally-enclosed-by=\"--fields-escaped-by=? --lines-terminated-by=\r\nEnter password: ****C:\Users\lfy>

说明:使用逗号“,”隔开,字段使用双引号括起来,转义字符为“?”问号,回车换行使用“\r\n”。

3》使用MySQL命令导出文本文件

如果MySQL服务器是单独的机器,用户是在一个client上进行操作,用户要把数据结果导入到client机器上,可以使用MySQL -e语句。MySQL语句导出,数据的人工可读性更强,txt文件第一行默认包含了字段名称。

mysql -u user -p pwd --execute="select语句" db_name > filename.txt

C:\Users\lfy>mysql -uroot -p --execute="select * from test" mybatis > C:\\Users\\lfy\\Desktop\\t.txtEnter password: ****C:\Users\lfy>

MySQL命令还可以指定查询结果的显式格式,如果某行记录字段太多不能显示完全,可以使用--vartical参数,将每条记录分为多行显示。

C:\Users\lfy>mysql -uroot -p --html --execute="select * from test" mybatis > C:\Users\lfy\Desktop\t.htmlEnter password: ****C:\Users\lfy>

C:\Users\lfy>mysql -uroot -p --xml --execute="select * from test" mybatis > C:\Users\lfy\Desktop\t.xmlEnter password: ****C:\Users\lfy>

4》使用load data infile方式导入文本文件

MySQL支持导入数据的语句,load data语句、source语句、MySQL语句。load data infile语句支持高速从一个文本文件中读取行,并装入一个表。文件名必须是字符串类型。

load data infile 'filename.txt' into table tb_name [options] [ignore number lines]

--ignore number lines表示忽略文件开始处的行数,number表示忽略的行数。

options选项:

5》使用MySQLimport命令导入文本文件

mysqlimport -u user -p pwd dbname filename.txt [options]--注意,并没有指定导入的数据表的名称,数据表的名称由文件名确定,导入数据之前该表必须存在

还有更多支持的选项,使用mysqlimport --help查看。

4、数据库迁移

1》相同版本的MySQL数据库之间的迁移

相同版本号,主要是指主版本号相同。相同版本号的MySQL数据库之间的迁移,主要是数据备份和数据恢复的组合。

//将主机上的MySQL数据库全部迁移到主机

//上,在主机(即迁出主机)上执行如下命令。

//MySQLdump导出的数据直接通过管道符"|"传递给MySQL命令导入的主机

//如果要迁移全部的数据库,可使用参数--all-databasesmysqldump -h -u user -p pwd dbname | mysql -h -u user -p pwd

2》不同版本的MySQL数据库之间的迁移

业务数据备份当然是很重要的。主要要注意的是老版本的权限控制信息、字符集等问题。存在中文数据的表特别要注意!

3》不同数据库之间的迁移

根据实际情况使用了。数据要保存,还有数据库之间对功能支持的差异,比如字段精度、支持的数据类型差异等。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。