五、mysqldum mysqldump客户端工具是用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表,以及插入表的SQL语句 简单说这个mysqldum工具只负责导出,是用来数据备份的,其中-T参数的用法一定要掌握,因为跟下一个要学习的工具有关
语法 mysqldump [options] db_name [tables] mysqldump [options] --database/-B db1 [db2 db3 ...] mysqldump [options] --all-databases/-A
连接选项 | 作用 |
---|---|
-u, --user=name | 指定用户名 |
-p, --password[=name] | 指定密码 |
-h, --host=name | 指定服务器ip或域名 |
-P, --port=# | 指定连接端口,注意是大写的P |
输出选项 | 作用 |
---|---|
--add-drop-database | 在每个数据库创建语句前加上drop database语句 |
--add-drop-table | 在每个表创建语句前加上drop table语句,默认开启; 不开启(--skip-add-drop-table) |
-n, --no-create-db | 不包含数据库的创建语句 |
-t, --no-create-info | 不包含数据表的创建语句 |
-d, --no-data | 不包含表数据 |
-T,--tab=name | 自动生成两个文件:一个.sql文件(创建表结构的语句),另一个.txt文件(数据文件) |
在文件备份时,要么备份到当前目录,要么备份到指定路径(当带参数的时候才能,不带参数的话是不可以指定路径的),这里来讲一下如何才能备份到指定路径
进行文件备份时,如何指定MySQL认为安全的目录路径,即我们指定路径的时候如何指定才不会报错
mysql -h192.168.127.138 -P3306 -u root -p228675;
show variables like '%secure_file_priv%'; #输出/var/lib/mysql-files/,也就是我们只能指定输出的备份文件为这个路径,否则就会报错
exit; #退出,因为这节课不需要登录进MySQL,这里讲,所以就临时登录一下
打开linux终端,执行如下
mysqldump -h192.168.127.138 -P3306 -u root -p228675 bilibili > dumpbeifen.sql; #把bilibili数据库备份到当前目录
cat dumpbeifen.sql; #查看文件数据
mysqldump -h192.168.127.138 -P3306 -u root -p228675 bilibili stu > dumpstu.sql; #把bilibili数据库的stu表备份到当前目录
cat dumpstu.sql; #查看文件数据
上面生成的dumpbeifen.sql和dumpstu.sql文件是在没有参数的情况下备份生成的,里面的数据有注释信息、建表语句、删表语句、插入语句
下面演示一下输出参数,看生成的备份文件的数据会有什么变化
xxxxxxxxxx
#把bilibili数据库备份到当前目录,-t参数:备份文件不含建表语句
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -t bilibili > dumpbeifen_t.sql;
#查看文件数据(里面就少了建表删表语句,也就是没有对表结构备份。只备份了表里面的数据)
cat dumpbeifen_t.sql;
#把bilibili数据库备份到当前目录,-d参数:备份文件不含表数据
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -d bilibili > dumpbeifen_d.sql;
#查看文件数据(里面只有建表删表语句,也就是只备份了表结构,没有备份表里面的数据)
cat dumpbeifen_d.sql;
#把bilibili数据库的stu表备份到/root目录,-T参数:自动备份成两个文件
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -T /root bilibili stu;
上面那个在/root目录只出现stu.sql文件,没有stu.txt文件。原因是'当前目录'不安全,txt文件只能指定一个安全的路径才能让你备份。如下
xxxxxxxxxx
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -T /var/lib/mysql-files/ bilibili stu;
#即可查到/var/lib/mysql-files/路径下的stu表对应的stu.sql和stu.txt文件
cd /var/lib/mysql-files/ && ll;
#查看表数据,这个文件是纯数据,没有任何字段信息,而且信息的格式非常整齐
cat stu.txt;
六、mysqlimport/source
mysqlimport是客户端数据导入工具,用来导入'mysqldump加-T参数后导出的文本文件', (1)简单说这个mysqldum工具只负责导入,并且只能导入特定的txt文件 (2)简单说这个source工具只负责导入,并且只能导入特定的sql文件 上一个mysqldump工具使用T参数之后生成的文本文件(自动备份成.sql和.txt文件,对于这两种文件,我们这节课会有mysqldum工具和source工具来导入)
语法 mysqlimport [options] db_name textfile1 [textfile2 ...]
如果需要导入sql文件,可以使用source工具,语法如下 source /root/xxxx.sql;
示例如下
xxxxxxxxxx
#创建test数据库,我们等下会把数据导入进test数据库
mysql -h192.168.127.138 -P3306 -u root -p228675 -e "create database if not exists test";
mysql -h192.168.127.138 -P3306 -u root -p228675 test -e "create table stu(
id int primary key comment '主键ID',
name varchar(10) comment '姓名',
age int comment '年龄'
) comment '简单学生表';";
#查看stu表有没有数据,目前没有数据只有表结构(字段),查不出来任何
mysql -h192.168.127.138 -P3306 -u root -p228675 test -e "select * from stu;";
#上面那些的目的是创建新数据库test,并在test数据库里面创建只有表结构的stu表,stu表的具体数据需要下面来导入
#导入数据
mysqlimport -h192.168.127.138 -P3306 -u root -p228675 test /var/lib/mysql-files/stu.txt;
#查看stu表有没有数据,有就说明导入数据成功了
mysql -h192.168.127.138 -P3306 -u root -p228675 test -e "select * from stu;";
xxxxxxxxxx
rm -rf dumpbeifen.sql;
#把bilibili数据库备份到当前目录,会生成dumpbeifen.sql备份文件
mysqldump -h192.168.127.138 -P3306 -u root -p228675 bilibili > dumpbeifen.sql;
#删除bilibili数据库里面的数据,等下我们使用备份恢复表结构+表数据
mysql -h192.168.127.138 -P3306 -u root -p228675 -e "drop database if exists bilibili;";
#创建bilibili数据库,只有库,里面没有任何表和数据
mysql -h192.168.127.138 -P3306 -u root -p228675 -e "create database if not exists bilibili;";
#注意source工具需要登录进mysql里面使用,如下
#登录
mysql -h192.168.127.138 -P3306 -u root -p228675;
use bilibili;
#即可使用备份文件,恢复bilibili数据库里面的所以表,以及表数据
source /root/dumpbeifen.sql;
#验证
show tables;
tip: 不要慌,那些命令都是我试过一次的,没有问题。a_113_0和a_114_0在没有说明需要登录进mysql的情况下,都是直接
在xshell终端(远程的是linux系统)进行的。
需要登录进mysql的话,我都有把命令写出来的,只需要换成你的ip和密码即可。介绍的数据库管理工具主要就六种,这节课的两种是数据
的导出备份+导入恢复,是一起的,所以这两种放在同一课,也就是同一个a_114_0文件。首先恭喜学到这里的你,以及苦逼写笔记的我,因为目前
已经学了mysql的半壁江山啦,后续的知识将是运维篇的,会更难哦,如果你只是学脚本或者前端,那么就可以退了,目的是把接下来的时间
去学你想学的其他东西,但是,如果你是全栈,那么请跟我继续MySQL运维篇的学习,时间宝贵,下节课的运维篇见