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:\Users\Administrator>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 '\r\n'
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 '\r\n'
-> 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 '\r\n';
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 '\r\n';
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)