1. 在centos7下在安装
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm # 第一步: 下载mysql yum包
yum localinstall mysql80-community-release-el7-3.noarch.rpm # 第二步: 安装你下载rpm包
vi /etc/yum.repos.d/mysql-community.repo ###把mysql 8.0相关选项闭闭,把5.7给打开 # 第三步:把myslq80的仓库源关闭掉,mysql57开启
yum clean all (可选)
yum install mysql-community-server # 安装mysql server # 第四步: 执行该命令进行安装mysql
systemctl start mysqld # 第五步:启动mysql服务器
systemctl enable mysqld # 第六步: 设置开机自动启动
grep 'temporary password' /var/log/mysqld.log # 第七步: 执行该命令获取mysql安装时自动产生的密码。
mysql -uroot -p # 第八步: 登陆mysql 服务器,密码就是第七步看到那个密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!'; # 第九步: 更改密码
授权
第一步:授权devopsedu用户可以从任何主机访问我们的数据库
CREATE USER 'devopsedu'@'%' IDENTIFIED BY 'zxc123ZXC@@';
grant all privileges on *.* to 'devopsedu'@'%' identified by 'zxc123ZXC@@';
第二步:刷新一下权限(可选)
flush privileges;
docker 安装方式
docker pull mysql:5.7
docker images
mkdir -p /home/service/mysql/data
mkdir -p /home/service/mysql/conf/my.cnf
在my.cnf追加如下数据
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
default-time_zone = '+8:00'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
然后运行命令启动mysql
docker run -p 3306:3306 --name mysql \
-v /home/service/mysql/data:/var/lib/mysql \
-v /home/service/mysql/conf/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456\
-e TZ=Asia/Shanghai \
-d mysql
命令讲解
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-e TZ=Asia/Shanghai 修改容器默认时区为上海
-v=/mysqltest/config/my.cnf:/etc/my.cnf:映射配置文件
-v=/mysqltest/data:/var/lib/mysql:映射数据目录
注意:不同mysql版本可能配置文件目录和路径不一样,mysql5.7的容器路径为 /etc/mysql/mysql.conf.d/mysqld.cnf。
docker exec -it mysql bash
创建mysql 用户
CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'admin'@'%';
flush privileges;
然后就可以使用admin用户登陆了,因为mysql8与mysql5.7授权有一些不一样,mysql必须先创建用户才能授权,不然会出错。
docker exec -it mysql /bin/bash
cd /etc/mysql/mysql.conf.d
apt-get update
apt-get install vim
vim mysqld.cnf
加入如下一行
default-time_zone = '+8:00'
或者直接追加
echo "default-time_zone = '+8:00'" >> mysqld.cnf
修改时区
在我们备份数据库的时候,有用到时间因素,但是 Docker 容器中默认为 +0 时区,而我们是 +8 时区,我们将宿主机的时区文件映射过去就行。
-v /etc/localtime:/etc/localtime:ro
重启数据库,查看时区 show variables like '%time_zone%';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
mysql 数据的查询
SELECT:
SELECT语句允许我们从表中或者视图中获取数据。一个表它包含数个列和行,就相当于我们的excle中的一个表格一样。
SELECT 语法分解:
SELECT
columh_1,columh_2,...
FROM
table_1
[INNER | LEFT | RIGHT] JOIN table_2 ON cohditionhs
WHERE
cohditionhs
HAVING group_cohditons
ORDER BY columh_1
LIMIT offset,lehgt
生产环境中注意的问题:
1. 这个*代表着返回所有的数据,所以不建议在生产中执行下列语句
select * from table1,
因为这会返回大量你不需要数据,但是会对磁盘IO造成大量负担。
2. 使用*号可能会泄露我们的敏感信息。
第二节课: distinct介绍
select distinct语句是消除结果中重复的行。
语句结构:
SELECT DISTINCT
columhs
FROM
table_name
WHERE
where_cohditions;
两行合起来唯一的案例:
SELECT DISTINCT
state, city
FROM
customers
WHERE
state IS NOT NULL
ORDER BY state, city;
Group by: 就是把数据划到一个分组里面去,然后进行以组名义排序。这样仿佛也起到了唯一效果。
Distinct 和 Group By有什么区别:
如果在SELECT 语句中使用group by,但是它没有使用到聚合函数的话,GROUP BY= Distinct;
唯一区别就是group by 能够排序结果,而我们的distinct不行。
Distinct如何结合聚合函数使用:
SELECT
COUNT(DISTINCT state)
state
FROM
customers
WHERE
country = 'USA';
Distinct如何结合LIMIT语句来使用:
SELECT DISTINCT
state
FROM
customers
WHERE
state IS NOT NULL
LIMIT 5;
第三节课: mysql order by
当我们以 select语句查询数据的时候,搜索的结果默认是没有排序的。 如果对这个结果进行排序,就需要使用order by语句。允许我们做的事情。
1. 通过一个单列或者多列来排序一个结果集
2. 通过不同的列进行升序或者降序的方式进行排序我们查询到的结果。
order by语法:
SELECT columh1,columh_2
FROM table1
ORDER BY columh1 [asc|desc], columh2 [asc|desc]
如果order by语句没有指定asc或者desc,默认是以升序的方式。
多列使用order by排序的方式:
就是说先以第一列为准,如果第1列有相同的行。那么在第1列的基础上,进行排序第二列。
基于表达式来进行排序:
SELECT
orderNumber,
orderLineNumber,
quantityOrdered * priceEach
FROM
orderdetails
ORDER BY
orderNumber,
orderLineNumber,
quantityOrdered * priceEach
表达式使用别名方式进行排序的:
SELECT
orderNumber,
orderLineNumber,
quantityOrdered * priceEach AS subtotal
FROM
orderdetails
ORDER BY
orderNumber,
orderLineNumber,
subtotal;
如何使用自定义的方式进行排序:此处使用的是field函数。
SELECT
orderNumber, status
FROM
orders
ORDER BY FIELD(status,'In process','shipped','cancelled','resolved','On Hold','Disputed')