g6AbE6.jpg

此文档用于记录centos7安装mysql5.7的过程

清理环境

1
2
3
4
5
# centos7会自带mariadb
$ rpm -qa |grep -i mariadb
mariadb-libs-5.5.65-1.el7.x86_64
# 卸载mariadb
$ yum remove mariadb-libs-5.5.56-2.el7.x86_64

安装mysql源

1
2
3
4
5
6
# 下载源
$ wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装
$ yum localinstall mysql57-community-release-el7-11.noarch.rpm
# 检查是否安装成功
$ yum repolist enabled | grep "mysql.*-community.*"

安装配置mysql

安装mysql

1
2
3
4
5
6
7
8
# 安装
$ yum install -y mysql-community-server
# 启动
$ systemctl start mysqld
# 查看服务状态
$ systemctl status mysqld.service
# 设置开机启动
$ systemctl enable mysqld

登录修改mysql密码

 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
# 由于MySQL从5.7开始不允许首次安装后使用空密码进行登录!为了加强安全性,系统会随机生成一个密码以供管理员首次登录使用,这个密码记录在/var/log/mysqld.log文件中。
$ grep 'temporary password' /var/log/mysqld.log #最后冒号后面的就是临时密码
... [Note] A temporary password is generated for root@localhost: 82PmN)QNj3jy
$ mysql -uroot -p
# 登录后需要修改密码,执行下列两个SQL之一就可以
$mysql> set password=password("123456");
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
$mysql> alter user 'root'@'localhost' identified by '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
# 但是发现上面随意一个修改密码的SQL都有报错。注意:mysql 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位,如果不想设置的那么复杂的话 必须修改两个全局参数
# 查看密码策略
$mysql> show variables like '%password%';
# 设置参数
$mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

$mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

# 再进行修改密码
$mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

$mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

设置远程登录

  • 方案一 创建一个允许远程连接的账号
1
2
$mysql> GRANT ALL PRIVILEGES ON *.* TO 'dylan'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
$flush privileges;
  • 方案二 将root设置为可以远程连接
1
2
3
$mysql> use mysql;
$mysql> UPDATE user SET Host='%' WHERE User='root';
$mysql> flush privileges;

设置默认编码为utf8

 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
#查看默认编码
$mysql> show variables like "%character%";show variables like "%collation%";

#修改编码,修改mysql5.7的编码由latin1为utf8
$ vim /etc/my.cnf
.......
[mysqld]
character-set-server=utf8  #注意这个不能写成default-character-set=utf8,否则会导致5.7版本mysql无法打开
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
......
# 重启mysql服务
$ systemctl restart mysqld.service
# 登录查看
$ mysql -uroot -p
$mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

修改mysql存储目录

1
2
#查看数据存储路径 默认是/var/lib/mysql/
$mysql>show variables like '%dir%';
 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
# 停止mysql服务
$ systemctl stop mysqld
# 创建新的存储目录
$ mkdir /home/data
# 迁移数据
$ cp -R /var/lib/mysql /home/data/mysql
# 修改数据库目录权限
$ chown mysql:mysql -R /home/data/mysql/
# 修改配置文件
$ vim  /etc/my.cnf
......
[mysqld]
#datadir=/var/lib/mysql #注释掉原来的这行
#socket=/var/lib/mysql/mysql.sock #注释掉原来的这行

datadir=/home/data/mysql  #新增这两行
socket=/home/data/mysql/mysql.sock

[client]
socket=/home/data/mysql/mysql.sock #这行需要加 不然本地登录时会提示ERROR 2002 (HY000): '/var/lib/mysql/mysql.sock' (2)
[mysql]
socket=/home/data/mysql/mysql.sock  #这行需要加 不然本地登录时会提示ERROR 2002 (HY000): '/var/lib/mysql/mysql.sock' (2)


#启动mysql服务
$ systemctl start mysqld

默认配置文件路径

配置文件:/etc/my.cnf 日志文件:/var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid

参考链接

官方文档

https://www.yiibai.com/mysql/changing-password.html

https://www.jianshu.com/p/501cd46e942e

https://juejin.im/post/6844903926068674574#heading-0

https://blog.51cto.com/noodle/1727322