MySql数据库备份的几种方式

这篇文章主要介绍了MySql数据库备份的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

mysqldump工具备份

备份整个数据库

?

1

$> mysqldump -u root -h host -p dbname > backdb.sql

备份数据库中的某个表

?

1

$> mysqldump -u root -h host -p dbname tbname1, tbname2 > backdb.sql

备份多个数据库

?

1

$> mysqldump -u root -h host -p –databases dbname1, dbname2 > backdb.sql

备份系统中所有数据库

?

1

$> mysqldump -u root -h host -p –all-databases > backdb.sql

直接复制整个数据库目录(对于InnoDB存储引擎不适用)备份

windowns: installpath/mysql/data

linux: /var/lib/mysql

在复制前需要先执行如下命令:

?

1

2

3

4

MYSQL> LOCK TABLES;

# 在复制过程中允许客户继续查询表,

MYSQL> FLUSH TABLES;

# 将激活的索引页写入硬盘。

mysqlhotcopy工具备份

备份数据库或表最快的途径,只能运行在数据库目录所在的机器上,并且只能备份MyISAM类型的表。

要使用该备份方法必须可以访问备份的表文件。

?

1

2

$> mysqlhotcopy -u root -p dbname /path/to/new_directory;

#将数据库复制到new_directory目录。

mysql命令导入sql文件还原

?

1

2

3

4

$> mysql -u root -p [dbname] < backup.sql

# 执行前需要先创建dbname数据库,如果backup.sql是mysqldump创建的备份文件则执行是不需要dbname。

MYSQL> source backup.sql;

# 执行source命令前需要先选择数据库。

直接复制数据库目录还原

注: 该方式必须确保原数据库和待还原的数据库主版本号一致,并且只适用于MyISAM引擎的表。

  • 关闭mysql服务。
  • 将备份的文件或目录覆盖mysql的data目录。
  • 启动mysql服务。
  • 对于linux系统,复制完文件后需要将文件的用户和组更改为mysql运行的用户和组。
  • mysqlhotcopy快速恢复

    停止mysql服务,将备份数据库文件复制到存放数据的位置(mysql的data文件夹),重先启动mysql服务即可(可能需要指定数据库文件的所有者)。

    ?

    1

    2

    $> cp -R /usr/backup/test /usr/local/mysql/data

    # 如果恢复的数据库已经存在,则使用DROP语句删除已经存在的数据库之后,恢复才能成功,还需要保证数据库版本兼容。

    相同版本数据库之间迁移

    ?

    1

    2

    3

    $> mysqldump -h www.abc.com -uroot -p password dbname |

    $> mysqldump -h www.bcd.com -uroot -p password

    # 将服务器www.abc.com的数据库dbname迁移到服务器www.bcd.com的相同版本数据库上。

    不同版本的mysql数据库之间的迁移

    备份原数据库。

    卸载原数据库。

    安装新数据库。

    在新数据库中还原备份的数据库数据。

    数据库用户访问信息需要备份mysql数据库。

    默认字符集问题,MySQL4.x中使用latin1作为默认字符集,mysql5.x使用utf8作为默认字符集。如果有中文数据需要对默认字符集进行更改。

    不同数据库之间的迁移

    MyODBC工具实现MySQL和SQL Server之间的迁移。

    MySQL Migration Toolkit工具。

    表的导出和导入

    SELECT …… INTO OUTFILE 导出文本文件,该方法只能导出到数据库服务器上,并且导出文件不能已存在。

    ?

    1

    2

    3

    MYSQL> SELECT …… INTO OUTFILE filename [OPTIONS]

    MYSQL> SELECT * FROM test.person INTO OUTFILE "C:\\person0.txt";

    # 将表person里的数据导入为文本文件person0.txt。

    mysqldump文件导出文本文件(和INTO OUTFILE不一样的是该方法所有的选项不需要添加引号)

    ?

    1

    2

    3

    4

    $> mysqldump -T path -u root -p dbname [tables] [OPTIONS]

    # -T参数表明导出文本文件。path导出数据的目录。

    $> mysqldump -T C:\\test person -u root -p

    # 将test表中的person表导出到文本文件。执行成功后test目录下会有两个文件,person.sql和person.txt

    mysql命令导出文本文件

    ?

    1

    2

    3

    4

    MYSQL> mysql -u root -p –execute="SELECT * FROM person;" test > C:\\person3.txt;

    # 将test数据库中的person表数据导出到person3.txt文本文件中。–vartical参数可以将一行分为多行显示。

    MYSQL> mysql -u root -p –vartical –execute="SELECT * FROM person;" test > C:\\person3.txt;

    # –html将表导出为html文件,–xml文件将表导出为xml文件

    LOAD DATA INFILE导入文本文件

    ?

    1

    2

    3

    MYSQL> LOAD DATA INFILE 'filename.txt' INTO TABLE tablename [OPTIONS] [IGNORE number LINES];

    # [IGNORE number LINES]表示忽略行数

    MYSQL> LOAD DATA INFILE 'C:\\person0.txt' INTO TABLE test.person;

    mysqlimport导入文本文件

    ?

    1

    2

    3

    4

    $> mysqlimport -u root -p dbname filename.txt [OPSTONS]

    # 导入的表名有文件名决定,导入数据之前表必须存在

    $> mysqlimport -uroot -p test C:\\backup\\person.txt

    # 将数据导入到test数据库的person表中。

    使用mysqlbinlog恢复数据

    ?

    1

    2

    3

    4

    $> mysqlbinlog [option] filename | mysql -u user -p password

    # filename为二进制日志文件,

    $> mysqlbinlog –stop-date="2013-03-30 15:27:47" D:\\MySQL\\log\\binlog\\binlog.000008 | mysql -u root -p password

    # 根据日志文件binlog.000008将数据恢复到2013-03-30 15:27:47以前的操作。

    启动二进制日志

    ?

    1

    2

    3

    log-bin = path/filename #日志文件存储目录和文件名

    expire_log_days = 10 #日志自动删除时间

    max_binlog_size = 100M # 日志文件最大大小

    查看二进制日志

    ?

    1

    2

    3

    4

    MYSQL> SHOW VARIABLES LIKE 'log_%';

    MYSQL> SHOW BINARY LOGS;

    $> mysqlbinlog filename

    # filename为二进制日志文件名。

    删除二进制日志

    ?

    1

    2

    3

    MYSQL> RESET MASTER; #删除所有二进制日志

    MYSQL> PURGE {MASTER | BINARY} LOGS TO 'log_name'; #删除文件编号小于log_name编号的文件

    MYSQL> PURGE {MASTER | BINARY} LOGS BEFORE 'date'; #删除指定日期以前的文件

    暂时停止二进制日志(不需要重启mysql服务)

    ?

    1

    MYSQL> SET sql_log_bin = {0|1} #暂停或启动二进制日志。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持钦钦技术栈。

    原文链接:https://www.cnblogs.com/yourblog/archive/2019/02/15/10381962.html

    版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/13685/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

    (0)
    上一篇 2022年8月20日 下午2:00
    下一篇 2022年8月20日 下午2:00
    软件定制开发公司

    相关阅读

    发表回复

    登录后才能评论
    通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!