逻辑备份:备份的是建表,建库,插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库,效率相对较低。
远程备份语法:mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
本地备份语法:mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
1.常用备份选项
-A,--all-databases\ 备份所有库
-B,--datavases bbs test mysql 备份多个数据库
--no-data,-d\ 不导出任何数据,只导出数据库表结构
2.备份表
语法:# mysqldump -u username -p password db1 t1 > /db1.t1.bak
备份多个表:mysqldump -u root -p1 db1 t1 t2 > /db1.t1_t2.bak
其中,username和passwd是连接mysql服务器的用户名和密码,db1 t1是要备份的数据库名中的表,/db1.t1.bak是导出备份的文件名
例:
[root@mysql-server ~]# mkdir /home/back #创建备份目录
[root@mysql-server ~]# mysqldump -uroot -p'qf123' company employee5 > /home/back/company.employee5.bak
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@mysql-server ~]# mysqldump -uroot -p'qf123' company new_t1 new_t2 > /home/back/company.new_t1_t2.bak
3.备份数据库
备份一个库
语法:mysqldump -u username -p passwd db1 > /db1.bak
备份多个库(-B)
语法:mysqldump -u root -p1 -B db1 db2 db3 > /db123.bak
备份所有库:
语法: mysqldump -u root -p1 -A > /alldb.bak(远程备份再加 -h192.168.100.150)
例子:
[root@mysql-server ~]# mysqldump -uroot -p'qf123' company > /home/back/company.bak
[root@mysql-server ~]# mysqldump -uroot -p'qf123' -B company testdb > /home/back/company_testdb.bak
[root@mysql-server ~]# mysqldump -uroot -p'qf123' -A > /home/back/allbase.bak
4.恢复数据库和表
为保证数据一致性,应在恢复数据之前停止数据库对外的服务,停止binlog日志 因为binlog使用binlog日志恢复数据时也会产生binlog日志。
5.恢复库
语法:mysql -uroot -p1 db2 < /home/back/db1.bak
6.恢复表
mysql> set sql_log_bin=0; #停止binlog日志
mysql> source /home/back/db1.t1.bak; ----加路径和备份的文件 (使用source来导入备份文件)
或者:musql -u root -p1 db1 < db1.t1.bak
7.备份及恢复表结构
备份表结构:mysqldump -u root -p1 -d databasename tablename > dump.sql
恢复表结构:mysql -u root -p1 -D db1 < db1.t1.bak
8.在库里数据的导入导出,没有表结构。
表的导出和导入只备份表内记录,不会备份表结构,需要通过mysqldump备份表结构,恢复时先恢复表结构,再导入数据。
mysql> show variables like "secure_file_priv"; ----查询导入导出的目录。(保证数据安全做共享)
修改安全文件目录:
1.创建一个目录:mkdir 路径目录
[root@mysql-server ~]# mkdir /sql
2.修改权限
[root@mysql-server ~]# chown mysql.mysql /sql
3.编辑配置文件:
vim /etc/my.cnf
在[mysqld]里追加
secure_file_priv=/sql
4.重新启动mysql.
1.导出数据
登陆数据查看数据
mysql> show databases; #找到test库
mysql> use test #进入test库
mysql> show tables; #找到它t3表
mysql> select * from t3 into outfile '/sql/test.t3.bak';(into outfile '/sql/test.t3.bak';)意思为:表示将查询结果导出到指定的文件
添加修饰的:
mysql> select * from t3 into outfile '/sql/test.t3.bak1' fields terminated by ',' lines terminated by '\n';
注:
fields terminated by ',' :字段以逗号分割
lines terminated by '\n':结尾换行2.数据的导入
先将原来表里面的数据清除掉,只保留表结构
mysql> delete from t3;
mysql> load data infile '/sql/test.t3.bak' into table t3;
如果将数据导入别的表,需要创建这个表并创建相应的表结构。