Mysql 学习(运维版)
今天我们来学习运维人员应该掌握的Mysql内容,作为一名运维,我们要掌握的内容与开发有所不同
今天我们所述的mysql都是基于docker部署的,若你也想跟着本篇文章的流程进行跟练操作,可以先看这篇文章,完成前置的部署工作。《docker 部署 Mysql并实现数据持久化挂载(使用Navicat进行外部连接验证)》:https://www.cnblogs.com/OM-dyc/articles/18958008
在开始之前,我们可以先看看我们正在运行的容器
docker ps

可以看到没有容器在运行,那我们再查看一下全部容器
docker ps -a

可以看到容器还在,只是停止运行了
容器停止的原因有很多:手动停止;容器所在的 Docker Compose 服务被停止;服务器重启;
若是因为服务器重启导致的容器重启,可以在容器启动时增加自动重启策略
docker run -d \
--restart=always \ #自动重启
--name mysql-latest \
mysql:latest
现在我们先手动重启容器吧
docker start <容器id>
然后我们就可以通过mysql的基础指令来看看端口是否正常运行
lsof -i :3306
netstat -lntup |grep 3306

第一部分、修改密码
一个高强度的密码对于数据库的安全性起很大作用,这里作为演示设置了最简单的密码,但是在实际的生产环境中,一定要设置强度高的密码,这样能避免很多入侵
我们先进入容器内部,然后进入Mysql的客户端
docker exec -it mysql-latest bash
mysql -u root -p

我们可以通过两种方式来修改密码
1.ALTER USER语句
ALTER USER 'root'@'localhost' IDENTIFIED BY '654321';
FLUSH PRIVILEGES; #立即刷新权限缓存

2.SET PASSWORD 语句
SET PASSWORD FOR 'root'@'localhost' = '654321';
FLUSH PRIVILEGES;

第二部分、数据库相关操作
1.创建一个数据库并指定默认字符集和排序规则
create database test default charset utf8mb4 collate utf8mb4_unicode_ci;
2.创建一个用户使之管理该数据库
create user 'test'@'localhost' identified by 't@est';
3.查看用户是否创建成功
select user from mysql.user
4.授予用户权限以操作数据库
grant all privileges on test.* to 'test'@'localhost';
(这里我直接一次性把所有的权限都授予了该用户,但是在实际的生产环境中,如果你需要给用户授予权限,应该根据需求单独为其授予权限,而不应该把全部的权限都交出去,例如:GRANT SELECT, INSERT, DELETE ON test.* TO 'test'@'localhost';这里只授予了test用户查找,插入,删除的权限)
5.查看用户的权限
show grants for 'test'@'localhost';

第三部分、表操作
1.进入test数据库
use test;
2.创建innodb utf8mb4表test,字段id int primary key auto-increment和name varchar(16)not null
create table test(
id int primary key auto_increment,
name varchar(16) not null
)engine = innodb default charset=utf8mb4;
3.查看表结构和建表sql语句
desc test;
show create table test\G;
\G:使用垂直结构显示,更好阅读

4.插入数据
insert into test values('1','gun');
insert into test values('2','run');
insert into test values('3','aun'),('4','qun');

5.查询名为run的记录
select *from test where name = 'run';
6.把第四项数据名字qun改为jun
update test set name = 'jun' where id = '4';
7.在字段name前面插入age字段,类型tinyint(2)
alter table test add age tinyint(2) after id;

第四部分、数据库备份和恢复(热备、冷备)
数据的备份和恢复在生产环境中非常重要,对于重要的数据库一定要进行备份
数据库的备份可以分为热备和冷备,热备即在数据库运行的同时进行备份,不影响业务;冷备需要先关闭mysql服务。
热备份需要借助工具来完成,MySQL Enterprise Backup或者mysqldump工具都行;而冷备份可以通过MySQL Enterprise Backup来完成也可以通过文件系统的cp操作来完成。下面我们进行一个热备来实操一下
1.数据库备份(退出到宿主机执行)
PASSWORD='*******' #替换为自己的密码
docker exec -i mysql-latest mysqldump -u root -p"$PASSWORD" -B test > /root/test_bak.sql
ls -lh /root/test_bak.sql #查看是否备份成功

2.删除数据库并恢复
delete from test;
select * from test;
drop table test;
show tables;
drop database mingongge;
show databases;
恢复跟备份一样,退出MySQL客户端到宿主机进行
docker exec -i mysql-latest mysql -uroot -p"$PASSWORD" < /root/test_bak_fixed.sql
恢复后重新进入MySQL客户端,查看数据发现已经恢复

第五部分、索引
索引的建立可以减少服务器需要扫描的数据量,大大的加快了查询的速度。但索引也需要占用物理空间,在进行增删改查等操作时,也需要对索引进行动态的维护。
下面是一段建立索引的示例
1.在name字段上创建一个普通索引
create index nindex on test(name(16));
2.新增一列number char(11)字段,
alter table test add number char(11);
3.插入两条新记录
insert into test values('5','23','pun','13700000001'),('6','26','zun','13710000001');
4.再对number字段也创建索引
create index nindex on test(number(8));
5.查看一下创建的索引信息
show index from test;
show create table test\G
#下面的命令也可以查看索引类型
show keys from test\G
6.创建联合索引
drop index nindex on test;
drop index tindex on test;
create index uindex on test(name(6),number(8));
7.创建唯一索引
create unique index onlyindex on test(name(6));
8.创建唯一组合索引
create unique index uoindex on test(name(6),number(8));
说明:由于测试使用的数据库过小,无法体现出索引在查找方面体现出来的作用。
这一期的MySQL就到这里了,但是关于MySQL的需要掌握的知识,远不止于此,对于运维来说,掌握MySQL的参数调优才是重中之重,关于这方面的学习,我们放到下一篇文章。好了,就到这里了,byebye~
浙公网安备 33010602011771号