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)