zoukankan      html  css  js  c++  java
  • MySQL学习——备份和还原

    MySQL学习——备份和还原

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

    部分内容来自以下博客:

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

    常用命令

    导出数据

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

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

    导入数据

    1 [root@localhost ~]# mysql -uroot -p'123456' --database ide < db_back.sql

    导出数据

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

    语法

    导出全部数据库:

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

    导出指定数据库:

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

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

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

    说明

    用户名:

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

    1 --user, -u

    密码:

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

    1 --password, -p

    主机地址:

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

    1 --host, -h

    端口号:

    设置用于连接的端口号。

    1 -P, --port

    连接协议:

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

    1 --protocol

    套接字文件:

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

    1 -S, --socket

    导出全部数据库:

    1 --all-databases, -A

    导出指定数据库:

    1 --databases, -B

    导出指定表:

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

    1 --tables

    不导出指定表:

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

    1 --ignore-table

    导出全部表空间:

    1 --all-tablespaces, -Y

    不导出表空间信息:

    1 --no-tablespaces, -y

    不添加创建数据库语句:

    默认添加。

    1 --no-create-db, -n

    添加删除数据库语句:

    默认不添加。

    1 --add-drop-database

    不添加创建表语句:

    默认添加。

    1 --no-create-info, -t

    添加删除表语句:

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

    1 --add-drop-table
    2 –-skip-add-drop-table

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

    1 --no-data, -d

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

    1 --routines, -R

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

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

    1 --add-locks
    2 --skip-add-locks

    设置默认的字符集:

    默认是utf8。

    1 --default-character-set

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

    1 --compress, -C

    处理换行:

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

    1 --result-file, -r

    添加导出时间:

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

    1 --dump-date
    2 --skip-dump-date

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

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

    1 --where, -w

    合并多个插入语句:

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

    1 --extended-insert
    2 --skip-extended-insert

    使用完整的插入语句:

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

    1 --complete-insert, -c

    忽略插入错误:

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

    1 --insert-ignore

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

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

    1 --max_allowed_packet

    强制插入:

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

    1 --force, -f

    实例

    导出全部数据库:

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

    导出指定数据库:

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

    导出指定表:

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

    不导出指定表:

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

    设置默认字符集:

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

    处理换行:

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

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

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

    使用完整的插入语句:

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

    导入数据

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

    语法

    在Linux系统使用<命令:

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

    在MySQL数据库使用source命令:

    1 source 文件路径

    实例

    在Linux系统使用<命令:

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

    在MySQL数据库使用source命令:

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

    效率比较

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

    优化导入速度

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

    修改配置文件

    配置如下:

    1 [mysqld]
    2 bulk_insert_buffer_size=2G;
    3 innodb_log_buffer_size=2G;
    4 innodb_autoinc_lock_mode=2;

    说明:

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

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

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

    删除索引

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

    执行批量脚本

    bash脚本内容:

    1 for SQL in *.sql;
    2 do
    3 echo $SQL;
    4 sed -i '1iSET autocommit=0;
    SET unique_checks=0;
    SET foreign_key_checks=0;' $SQL
    5 sed -i '$aCOMMIT;
    SET autocommit=1;
    SET unique_checks=1;
    SET foreign_key_checks=1;' $SQL
    6 done

    说明:

    关闭自动提交:autocommit=0。

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

    关闭外键检查:foreign_key_checks=0。

  • 相关阅读:
    DALSA线阵相机调焦、平场校正、行频微调
    千兆网卡、万兆网卡设置
    【转载】.h头文件 .lib库文件 .dll动态库文件之间的关系,静态编译、动态编译
    【转载】工控机插槽
    镜头的选择
    相机SDK流程
    光栅尺触发DALSA线阵相机
    Go语言备忘录(3):net/http包的使用模式和源码解析
    Go语言备忘录(2):反射的原理与使用详解
    Go语言备忘录(1):基本数据结构
  • 原文地址:https://www.cnblogs.com/shamao/p/12092793.html
Copyright © 2011-2022 走看看