MySQL学习——备份和还原

摘要:本文主要学习了如何备份和还原数据库。

部分内容来自以下博客:

https://www.cnblogs.com/chenmh/p/5300370.html

常用命令

导出数据

导出2019年1月的数据,数据库是ide,表是user,要求不需要导出建库语句,要求使用完成的插入语句,并且合并插入:

 [root@localhost ~]# mysqldump -h 127.0.0.1 -P  -uroot -p'' --no-create-info --databases ide --tables user \
> --where=" date >= '2019-01-01' and date < '2019-02-01' " --complete-insert --extended-insert > '/data/dump/201901.txt'

导入数据

 [root@localhost ~]# mysql -uroot -p123456 database < db_back.sql

导出数据

导出数据一般使用mysqldump命令在Linux系统执行。

语法

导出全部数据库:

 mysqldump [OPTIONS] --all-databases [OPTIONS]

导出指定数据库:

 mysqldump [OPTIONS] --databases DB1 [DB2 DB3...] [OPTIONS]

导出指定数据库的指定表:

 mysqldump [OPTIONS] --database DB --tables TB [TB2 TB3...] [OPTIONS]

说明

用户名:

登录数据库的用户名,当前用户可省略该配置,“-u”后面紧跟用户名,或者使用“--user=”后面紧跟用户名的方式。

 --user, -u

密码:

登录数据库的密码,“-p”后面紧跟密码,或使用“--password=”后面紧跟密码的方式。

 --password, -p

主机地址:

设置数据库所在的主机地址,默认是localhost。

 --host, -h

端口号:

设置用于连接的端口号。

 -P, --port

连接协议:

设置使用的连接协议,取值有TCP、SOCKET、PIPE、MEMORY四种。

 --protocol

套接字文件:

指定当连接localhost时的套接字文件位置,默认路径是/tmp/mysql.sock。

 -S, --socket

导出全部数据库:

 --all-databases, -A

导出指定数据库:

 --databases, -B

导出指定表:

只能针对一个数据库进行导出,并且导出的内容中没有创建数据库的判断语句。

 --tables

不导出指定表:

指定忽略多个表时,需要重复多次,每次一个表,每个表必须同时指定数据库和表名。

 --ignore-table

导出全部表空间:

 --all-tablespaces, -Y

不导出表空间信息:

 --no-tablespaces, -y

不添加创建数据库语句:

默认添加。

 --no-create-db, -n

添加删除数据库语句:

默认不添加。

 --add-drop-database

不添加创建表语句:

默认添加。

 --no-create-info, -t

添加删除表语句:

默认添加,使用“--skip-add-drop-table”参数取消。

 --add-drop-table
–-skip-add-drop-table

不导出数据只导出表结构:

 --no-data, -d

导出存储过程以及自定义函数:

 --routines, -R

在每个表导出前锁表并在导出后解锁:

默认为打开状态,使用“--skip-add-locks”参数取消。

 --add-locks
--skip-add-locks

设置默认的字符集:

默认是utf8。

 --default-character-set

在客户端和服务器之间启用压缩传递所有信息:

 --compress, -C

处理换行:

直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。

 --result-file, -r

添加导出时间:

将导出时间添加到输出文件中。默认为打开状态,使用“--skip-dump-date”参数取消。

 --dump-date
--skip-dump-date

只导出符合指定条件的记录:

如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

 --where, -w

合并多个插入语句:

默认开启,使用“--skip-extended-insert”关闭。

 --extended-insert
--skip-extended-insert

使用完整的插入语句:

使用包含列名称的完整插入语句。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。

 --complete-insert, -c

忽略插入错误:

默认不添加,在插入语句中添加忽略错误语句。

 --insert-ignore

服务器发送和接受的最大包长度:

客户端/服务器之间通信的缓存区的最大大小,最大为1GB。

 --max_allowed_packet

强制插入:

在表转储过程中,即使出现SQL错误也继续。

 --force, -f

实例

导出全部数据库:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --all-databases > db_back.sql

导出指定数据库:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --databases test demo > db_back.sql

导出指定表:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --database test --tables demo user > db_back.sql

不导出指定表:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --all-databases \
> --ignore-table=database.table1 --ignore-table=database.table2 > db_back.sql

设置默认字符集:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --all-databases --default-character-set=latin1 > db_back.sql

处理换行:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --all-databases --result-file=/tmp/mysqldump_result_file.txt

只导出符合指定条件的记录:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --all-databases --where=" id=1 limit 10"

使用完整的插入语句:

 [root@localhost ~]# mysqldump -h127.0.0. -uroot -p --all-databases --complete-insert

导入数据

导入数据有两种方式,一种是在Linux系统使用<命令导入,另一种是在MySQL数据库使用source命令导入。

语法

在Linux系统使用<命令:

 mysql -u用户名 -p密码 数据库名 < 文件路径

在MySQL数据库使用source命令:

 source 文件路径

实例

在Linux系统使用<命令:

 [root@localhost ~]# mysql -uroot -p123456 database < db_back.sql

在MySQL数据库使用source命令:

 mysql> source /home/user/data/db_back.sql

效率比较

在文件较小的情况下,source速度比mysql高。在导入大的文件时,建议使用mysql命令。

优化导入速度

对于百M级以上文件,根据MySQL官方建议,有几个措施可以极大提高导入的速度。

修改配置文件

配置如下:

 [mysqld]
bulk_insert_buffer_size=2G;
innodb_log_buffer_size=2G;
innodb_autoinc_lock_mode=;

说明:

对于MyISAM,调整系统参数:bulk_insert_buffer_size。改为至少单个文件大小的2倍以上。

对于InnoDB,调整系统参数:innodb_log_buffer_size。改为至少单个文件大小的2倍以上,导入完成后可以改回默认的8M,注意不是innodb_buffer_pool_size。

有自增列的,设置:innodb_autoinc_lock_mode的值为2。

删除索引

除主键外,删除其他索引,导入完成后重建索引。

执行批量脚本

bash脚本内容:

 for SQL in *.sql;
do
echo $SQL;
sed -i '1i\SET autocommit=0;\nSET unique_checks=0;\nSET foreign_key_checks=0;' $SQL
sed -i '$a\COMMIT;\nSET autocommit=1;\nSET unique_checks=1;\nSET foreign_key_checks=1;' $SQL
done

说明:

关闭自动提交:autocommit=0。

关闭唯一索引检查:unique_checks=0。

关闭外键检查:foreign_key_checks=0。

MySQL学习——备份和还原的更多相关文章

  1. [转]MySQL数据库备份和还原的常用命令小结

    MySQL数据库备份和还原的常用命令小结,学习mysql的朋友可以参考下: 备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword datab ...

  2. day 50 MySQL数据备份与还原(mysqldump)

      MySQL数据备份与还原(mysqldump)   一 mysqldump指令实现数据备份.mysql指令实现数据还原 经常有朋友问我,DBA到底是做什么的,百科上说:数据库管理员(Databas ...

  3. mysql多线程备份与还原工具mydumper

    (一)mydumper介绍 之前我们已经学过如何使用mysqldump备份恢复数据库:<mysql逻辑备份与还原工具mysqldump>,就目前来说,mysqldump是使用最广泛的MyS ...

  4. 转 MySQL 数据备份与还原

    MySQL 数据备份与还原 原贴:http://www.cnblogs.com/kissdodog/p/4174421.html   一.数据备份 1.使用mysqldump命令备份 mysqldum ...

  5. Linux下MySQL的备份与还原

    Linux下MySQL的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [roo ...

  6. Mysql数据库备份和还原常用的命令

    Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下 ...

  7. MySQL的备份和还原

    MySQL的备份和还原 备份:副本    RAID1,RAID10:保证硬件损坏而不会业务中止:        DROP TABLE mydb.tb1; 备份类型:        热备份.温备份和冷备 ...

  8. mysql数据备份和还原命令

    mysql数据库备份和还原   备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfil ...

  9. MySQL的备份与还原

    原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...

随机推荐

  1. C 语言宏定义函数编写时 do-while 的妙用和一些注意事项

    在 C 语言中,我们都知道可以用宏定义来编写函数,一般称为宏函数.如果一个宏函数比较复杂,那么在编写这样的宏函数是有一定技巧和注意事项的.文章给出一些我认为值得关注的地方,以及一些注意事项(个人建议) ...

  2. Nice to meet you for the first time .Why do I write blog!

    他们说我不修边幅,因为他们没看到我对细节的追求,他们说我技术宅,因为他们看不懂我的悲欢,他们说我无趣,是因为她们不知道,我在让世界变得更有趣,我把误解拿来自黑,我用工作承载兴趣,我是程序员,是用代码编 ...

  3. firewall-cmd命令

    firewalld 基本操作 安装firewalld # yum install firewalld firewall-config firewalld启动,停止,开机启动与否,查看状态 # syst ...

  4. STP 生成树协议 RSTP 快速生成树

    STP(Spanning Tree Protocol)是生成树协议的英文缩写 该协议可应用于在网络中建立树形拓扑,消除网络中的环路,并且可以通过一定的方法实现路径冗余,但不是一定可以实现路径冗余.生成 ...

  5. git知识简单小结

    git特点: 1)分布式 2)存储快照而非差异 3)本地有完全的版本库,几乎所有操作都在本地 4)有内在的一致性,SHA1 5)优秀的分支管理 6)支持各种协同模式 7)开源,有一些第三方软件可整合使 ...

  6. vuex知识笔记,及与localStorage和sessionStorage的区别

    菜单快捷导航 Vuex是什么东东,有什么应用场景?localStorage和sessionStorage能否替代它? Vuex知识点State.Getter.Mutaion.Action Vuex模块 ...

  7. C语言快速排序函数------qsort();

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> ty ...

  8. pycharm创建Django项目时报 AttributeError:'module' object has no attrbute 'main' 错误或者创建了就只有venv一个目录

    这是因为创建项目时候没有选择合适的项目环境. 所以在创建项目的时候选择一下项目的环境,比如选择python的运行环境 这时候创建的项目就不再报 AttributeError:'module' obje ...

  9. docker启动nginx的ssl配置

    前提条件 一台云服务器(阿里云.腾讯云等的centOS) 服务器上面要有docker(安装方法这里不做介绍) 一个域名 ssl证书(两个文件:一个key后缀,一个pem后缀:生成方法很多这里不再介绍) ...

  10. centos7.x中安装SQL Server

    本文内容是采集的好几位博主的博文进行的一个整合,内容更为精准和详尽,以下是我参照的几篇博文地址: 微软官方文档:https://docs.microsoft.com/zh-cn/sql/linux/s ...