create database if not exists bilibili; #创建数据库bilibili use bilibili; #选择bilibili数据库,即可进行下面的代码演示 drop database if exists bilibili; #代码演示结束后删除bilibili数据库。这个小文件全部代码演示完再删 show databases; #查看是否删除完成
-- 准备数据
create table stu(
id int primary key comment '主键ID',
name varchar(10) comment '姓名',
age int comment '年龄'
) comment '简单学生表';
insert into stu values (1,'tom',1),(3,'cat',3),(8,'rose',8),(11,'jetty',11),(19,'lily',19),(25,'luci',25);
系统数据库
MySQL数据库安装完成之后,自带了四个数据库分别为information_schema、mysql、performance_schema、sys。下面那行就可查询到 show databases;
这四个系统数据库的具体作用如下:
数据库 | 含义 |
---|---|
mysql | 存储MySQL服务器正常运行所需要的各种信息(例如时区、主从、用户、权限) |
information_schema | 提供了访问数据库元数据的各种表和视图,包含数据库、表、字段类型以及访问权限 |
performance_schema | 为MySQL服务器运行时状态提供了一个底层监控功能,主要用于收集数据库服务器性能参数 |
sys | 包含了一系列方便DBA和开发人员利用performance_schema性能数据库进行性能调优和诊断的视图 |
上面的四个系统数据库的其中一部分表及其作用,如下
一、mysql
1、db表: 性能指标的系统库
2、slave_xxxx_xxxx表: 主从复制的相关记录,后面学主从复制时会讲
3、slow_log表: 慢日志
4、time_xxxx_xxxx表: 时区操作的相关信息
5、user: 用户表,存储的是当前数据库服务器可以被哪些用户访问,以及这些用户的权限
二、information_schema
1、engines表: 当前数据库支持的存储引擎,以及各个存储引擎的特点
2、innodb_xxxx_xxxx表: 当前数据库InnoDB引擎的各项指标
3、innodb_tables表: InnoDB引擎对应的表结构,即有什么表是InnoDB引擎的
4、innodb_tablespace表: InnoDB引擎对应的表空间
5、tablespace表: 表空间
6、schema_privileges表: 数据库的权限
7、routines视图: 当前数据库服务器有的存储过程、存储函数
8、schemata视图: 数据库的说明,数据库的字符集
9、tables视图: 当前数据库服务器有哪些表,以及表是在哪个数据库里面、表的引擎
10、triggers视图: 触发器
11、views视图: 视图
三、performance_schema
1、data_locks表: 当我们在查看意向锁和行级锁的时候,就会从data_locks表查看加锁情况
2、metadata_locks表: 当我们在进行元数据锁查看的时候,就会使用metadata_locks表
3、error_log表: 错误日志
4、events_xxxx_xxxx表: 事件信息
四、sys 包含一张表和性能相关的视图
下面所有的内容需要在xshell终端执行,远程的是linux系统
常用工具,下面会介绍好几个
一、mysql 该mysql不是指mysql服务,而是指mysql的客户端工具
语法 mysql [options] [database]
选项 | 作用 |
---|---|
-u, --user=name | 指定用户名 |
-p, --password[=name] | 指定密码 |
-h, --host=name | 指定服务器ip或域名 |
-P, --port=port | 指定连接端口,注意这个P是大写的 |
-e, --execute=name | 执行SQL语句并退出 |
注意 -e选项可以在MySQL客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本,这种方式尤其方便
示例
mysql -uroot -p123456 db01 -e "select * from stu"; #作用是在不登录MySQL的情况下,执行查询语句
打开linux终端,执行如下
xxxxxxxxxx
mysql -h192.168.127.138 -P3306 -u root -p228675 bilibili -e "select * from stu";
上面那行的优点: 在不登录MySQL的情况下,执行查询语句,注意需要指定远程ip、端口、用户、密码、某个数据库、语句
二、mysqladmin mysqladmin是一个执行管理操作的客户端程序。可以用它来检查服务器的配置和当前状态、创建并删除数据库等
通过帮助文档查看选项: mysqladmin --help
示例 mysqladmin -uroot -p123456 drop 'test01'; mysqladmin -uroot -p123456 version;
打开linux终端,执行如下
mysqladmin --help
mysqladmin -h192.168.127.138 -P3306 -u root -p228675 version;#查看当前数据库版本
mysqladmin -h192.168.127.138 -P3306 -u root -p228675 variables;#查看当前数据库的系统变量信息
mysqladmin -h192.168.127.138 -P3306 -u root -p228675 create db02;#创建db02数据库
mysql -h192.168.127.138 -P3306 -u root -p228675 -e 'show databases';#查看当前数据库服务器中有哪些数据库
mysqladmin -h192.168.127.138 -P3306 -u root -p228675 drop db02;#删除db02数据库
三、mysqlbinlog 由于服务器生成的二进制日志文件以二进制格式保存,所以如果想要检查这些文本的文本格式,就会使用到mysqlbinlog日志管理工具 在MySQL数据库服务器有一份二进制日志binlog,会在后续有讲
语法 mysqlbinlog [options] log-files1 log-files2 ...
选项 | 作用 |
---|---|
-d, --database=name | 指定数据库名称,只列出指定的数据库相关操作 |
-o, --offset=# | 忽略掉日志文件中的前n行命令 |
-r, --result-file=name | 将输出的文本格式日志输出到指定文件 |
-s, --short-form | 显示简单格式,省略掉一些信息 |
--start-datatime=date1 --stop-datetime=data2 | 指定日期间隔内的所有日志 |
--start position=pos1 --stop-position=pos2 | 指定位置间隔内的所有日志 |
打开linux终端,执行如下
cd /var/lib/mysql && ll; #里面的binlog开头的文件就是二进制文件
cat binlog.000010; #发现都是乱码,原因是cat指令不能查看二进制文件里面的内容
#执行了上面那行的命令之后,linux的终端会全部乱码,只需要退出,然后重新登录进mysql即可解决
cd /var/lib/mysql && ll;
mysqlbinlog binlog.000010;#使用看到mysqlbinlog就能查看二进制文件
mysqlbinlog -s binlog.000010;#查看的内容会比较紧凑,省略掉一些不必要的信息
四、mysqlshow mysqlshow客户端对象查找工具,用来很快地查找存在哪些数据库、数据库中的表、表中的列或者索引
语法 mysqlshow [options] [db_name [table_name [col_name]]]
选项 | 作用 |
---|---|
--count | 显示数据库及表的统计信息(数据库、表均可以不指定) |
-i | 显示指定数据库或者指定表的状态信息 |
示例。打开linux终端,执行如下
#查询每个数据库的表的数量及表中记录的数量
mysqlshow -h192.168.127.138 -P3306 -u root -p228675 --count;
#查询bilibili库中每个表中的字段数、行数
mysqlshow -h192.168.127.138 -P3306 -u root -p228675 bilibili --count;
#查询bilibili库中stu表的详细情况
mysqlshow -h192.168.127.138 -P3306 -u root -p228675 bilibili stu --count;
#查询bilibili库中stu表的id字段的详细情况
mysqlshow -h192.168.127.138 -P3306 -u root -p228675 bilibili stu id --count;
#把上面的 --count换成-i,表示展示的是状态信息。如果显示的状态信息太多,也就是一行太长了,可以把结果 #复制到Notepad++软件里面,就显得美观啦
上面的详细情况包括type类型、collation字符集、null是否可为空、key是什么键、privileges权限、comment注释、...
五、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终端,执行如下
xxxxxxxxxx
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
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -t bilibili > dumpbeifen_t.sql; #把bilibili数据库备份到当前目录,-t参数:备份文件不含建表语句
cat dumpbeifen_t.sql; #查看文件数据(里面就少了建表删表语句,也就是没有对表结构备份。只备份了表里面的数据)
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -d bilibili > dumpbeifen_d.sql; #把bilibili数据库备份到当前目录,-d参数:备份文件不含表数据
cat dumpbeifen_d.sql; #查看文件数据(里面只有建表删表语句,也就是只备份了表结构,没有备份表里面的数据)
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -T /root bilibili stu; #把bilibili数据库的stu表备份到/root目录,-T参数:自动备份成两个文件
上面那个在/root目录只出现stu.sql文件,没有stu.txt文件。原因是'当前目录'不安全,txt文件只能指定一个安全的路径才能让你备份。如下
xxxxxxxxxx
mysqldump -h192.168.127.138 -P3306 -u root -p228675 -T /var/lib/mysql-files/ bilibili stu;
cd /var/lib/mysql-files/ && ll; #即可查到/var/lib/mysql-files/路径下的stu表对应的stu.sql和stu.txt文件
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;
示例如下
mysqlimport工具-导入txt文件-表数据
mysql -h192.168.127.138 -P3306 -u root -p228675 -e "create database if not exists test";#创建test数据库,我们等下会把数据导入进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 '简单学生表';";
mysql -h192.168.127.138 -P3306 -u root -p228675 test -e "select * from stu;";#查看stu表有没有数据,目前没有数据只有表结构(字段),查不出来任何
#上面那些的目的是创建新数据库test,并在test数据库里面创建只有表结构的stu表,stu表的具体数据需要下面来导入
mysqlimport -h192.168.127.138 -P3306 -u root -p228675 test /var/lib/mysql-files/stu.txt;#导入数据
mysql -h192.168.127.138 -P3306 -u root -p228675 test -e "select * from stu;";#查看stu表有没有数据,有就说明导入数据成功了
source工具-导入sql文件-表结构+表数据
rm -rf dumpbeifen.sql;
mysqldump -h192.168.127.138 -P3306 -u root -p228675 bilibili > dumpbeifen.sql; #把bilibili数据库备份到当前目录,会生成dumpbeifen.sql备份文件
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;";#创建bilibili数据库,只有库,里面没有任何表和数据
#注意source工具需要登录进mysql里面使用,如下
mysql -h192.168.127.138 -P3306 -u root -p228675;#登录
use bilibili;
source /root/dumpbeifen.sql;#即可使用备份文件,恢复bilibili数据库里面的所以表,以及表数据
show tables;#验证
tip: 不要慌,那些命令都是我试过一次的,没有问题。a_113_0和a_114_0在没有说明需要登录进mysql的情况下,都是直接在xshell终端(远程的是linux系统)进行的。 需要登录进mysql的话,我都有把命令写出来的,只需要换成你的ip和密码即可。介绍的数据库管理工具主要就六种,这节课的两种是数据的导出备份+导入恢复,是 一起的,所以这两种放在同一课,也就是同一个a_114_0文件。首先恭喜学到这里的你,以及苦逼写笔记的我,因为目前已经学了mysql的半壁江山啦,后续的知识 将是运维篇的,会更难哦,如果你只是学脚本或者前端,那么就可以退了,目的是把接下来的时间去学你想学的其他东西,但是,如果你是全栈,那么请跟我继续 MySQL运维篇的学习,时间宝贵,下节课的运维篇见