mysql数据备份

MySQL数据备份

#1. 物理备份: 直接复制数据库文件,适用于大型数据库环境(
如数据文件、控制文件、归档日志文件等)。
但不能恢复到异构系统中如Windows。 

#2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
#3. 导出表: 将表导入到文本文件中。

使用Navicat工具

 点击转储SQL

使用MysqlWorkbench工具

 

使用mysqldump实现逻辑备份

#语法:
# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
当你是本地登录的时候这个-h可以不写,当其他用户登录时,就得写上-h 服务器

1.单库中所有表和数据备份
mysqldump -uroot -pmysql123 testmysql > testmysqlbak.sql

2.单库中部分表和数据备份
mysqldump -uroot -pmysql123 testmysql test1 test2 > tablebak1.sql

3.多库备份
mysqldump -uroot -pmysql123 --databases testmysql scrapy_study > mysqlbak.sql
4.备份所有库
mysqldump -uroot -pmysql123 --all-databases > mysqlallbak.sql
5.备份存储过程、触发器、函数
mysqldump -R -ndt testmysql -uroot -pmysql123 > proc.sql
6.不导出触发器(触发器是默认导出的–triggers,使用–skip-triggers屏蔽导出触发器)
mysqldump --skip-triggers dbname1 -u root -p > xxx.sql

   
总结一下:

-d 结构(--no-data:不导出任何数据,只导出数据库表结构)

-t 数据(--no-create-info:只导出数据,而不添加CREATE TABLE 语句)

-n (--no-create-db:只导出数据,而不添加CREATE DATABASE 语句)

-R (--routines:导出存储过程以及自定义函数)

-E (--events:导出事件)

--triggers (默认导出触发器,使用--skip-triggers屏蔽导出)

-B (--databases:导出数据库列表,单个库时可省略)

--tables 表列表(单个表时可省略)
①同时导出结构以及数据时可同时省略-d和-t
②同时 不 导出结构和数据可使用-ntd
③只导出存储过程和函数可使用-R -ntd
④导出所有(结构&数据&存储过程&函数&事件&触发器)使用-R -E(相当于①,省略了-d -t;触发器默认导出)
⑤只导出结构&函数&事件&触发器使用 -R -E -d 

恢复数据库

方法1.在没有登录进去之前恢复
C:UsersAdministrator>mysql -uroot -p123456 test < dbbak.sql
方法2.mysql登录进去后恢复
mysql> use testmysql;
Database changed
mysql> source proc.sql

  

导入导出数据

导出

# 导出

select *
into outfile '/home/mysql/table1_data.csv'
fields terminated by ',' optionally enclosed by '"' escaped by '"'
lines terminated by '
'
from user;

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

# 解决
mysql> show variables like '%secure%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_auth      | OFF   |
| secure_file_priv | /     |
+------------------+-------+

#修改配置my.cnf
secure_file_priv=''      -- 不对mysqld导入导出做限制

#参数解释
secure_file_prive=null   -- 限制mysqld不允许导入导出
secure_file_priv=/tmp/   -- 限制mysqld导入导出只能发生在/tmp/目录下
secure_file_priv=''      -- 不对mysqld导入导出做限制


#修改后,重启mysql
service mysqld restart

#导出csv
mysql> select *
    -> into outfile '/home/mysql/table1_data.csv'
    -> fields terminated by ',' optionally enclosed by '"' escaped by '"'
    -> lines terminated by '
'
    -> from user;
Query OK, 3 rows affected (0.00 sec)

#导出txt
mysql> select *
-> into outfile '/home/mysql/table1_data.txt'
-> fields terminated by '|' 
-> from user;
Query OK, 3 rows affected (0.00 sec)

  

导入

load data infile '/home/mysql/table1_data.csv'
into table user 
fields terminated by ',' optionally enclosed by '"' escaped by '"' 
lines terminated by '
';

load data infile '/home/mysql/table1_data.txt' 
into table user
fields terminated by '|'



mysql> delete from user;
Query OK, 3 rows affected (0.02 sec)

mysql> select * from user;
Empty set (0.00 sec)

mysql> load data infile '/home/mysql/table1_data.csv'
    -> into table user 
    -> fields terminated by ',' optionally enclosed by '"' escaped by '"' 
    -> lines terminated by '
';
Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0


mysql> select * from user;
+----+------+--------+
| id | name | dep_id |
+----+------+--------+
|  4 | egon |      1 |
|  5 | alex |      2 |
|  6 | jing |      3 |
+----+------+--------+
3 rows in set (0.00 sec)

mysql> truncate table user;
Query OK, 0 rows affected (0.00 sec)

mysql> load data infile '/home/mysql/table1_data.txt' 
    -> into table user
    -> fields terminated by '|';
Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from user;
+----+------+--------+
| id | name | dep_id |
+----+------+--------+
|  4 | egon |      1 |
|  5 | alex |      2 |
|  6 | jing |      3 |
+----+------+--------+
3 rows in set (0.00 sec)

  

  

  

原文地址:https://www.cnblogs.com/xiao-apple36/p/9621063.html