1. CentOS 6 RPM方式安装 MySQL7
1.1. 下载

设置选项
- 选择版本 5.7
- 选择系统 Red Hat
- 选择系统版本 Linux6 x86-64
在列表中下载以下几项
- RPM Package, MySQL Configuration (mysql-community-common-5.7.25-1.el6.x86_64.rpm)
- RPM Package, Shared Libraries (mysql-community-libs-5.7.25-1.el6.x86_64.rpm)
- RPM Package, MySQL Server (mysql-community-server-5.7.25-1.el6.x86_64.rpm)
- RPM Package, Client Utilities (mysql-community-client-5.7.25-1.el6.x86_64.rpm)
1.2. 卸载自带的mysql
一开始系统自带mysql-libs1
2$ rpm -qa | grep -i mysql # grep 选项-i表示不区分大小写
mysql-libs-5.1.73-8.el6_8.x86_64
将其卸载1
2
3# -e: 卸载rpm
# --nodeps 卸载时不检查依赖关系
rpm -e --nodeps mysql-libs-5.1.73-8.el6_8.x86_64
按照依赖关系依次安装MySQL的rpm包,安装顺序为common->libs->client->server1
2
3
4
5
6
7# -i: install安全
# -v: verbose显示进度
# -h: hash进行哈希检验
rpm -ivh mysql-community-common-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el6.x86_64.rpm
检验安装成功1
2
3
4
5
6
7
8
9
10
11
12
13$ rpm -qa | grep mysql # 检验rpm是否安装
mysql-community-common-5.7.25-1.el6.x86_64
mysql-community-server-5.7.25-1.el6.x86_64
mysql-community-client-5.7.25-1.el6.x86_64
mysql-community-libs-5.7.25-1.el6.x86_64
$ cat /etc/passwd | grep mysql # 检测是否生成mysql用户
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
$ cat /etc/group | grep mysql # 检测是否生成mysql用户组
mysql:x:27:
$ mysql --version
mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper
1.3. 启动关闭MySQL服务
1 | service mysqld start |
1.4. 配置root密码
一开始MySQL的root用户是没有密码的。这样不安全,所以要先设置
启动MySQL服务之后,用mysqladmin命令设置root密码。发现无权访问1
2
3$ mysqladmin -u root password 123456
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
解决方法如下:1
2
3service mysqld stop # 先关闭服务
mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # 启动安全模式
mysql -u root # 以root用户连接MySQL,没有密码
1 | mysql> use mysql; |
关闭mysql服务,注意此时的服务是指mysqld_safe1
2
3
4$ service mysqld stop # 关闭mysqld_safe
2019-04-10T01:43:39.129247Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
Stopping mysqld: [ OK ]
[1]+ Done mysqld_safe --user=mysql --skip-grant-tables --skip-networking
再开启mysql服务,用root用户连接mysql,发现连接成功1
2service mysqld start
mysql -uroot -p123456
1.5. 设置root密码永久有效
之前在配置root密码时,尝试设置永久生效,但是由于处于--skip-grant-tables状态,所以无法设置1
2mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; -- 设置密码永久生效
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
连接mysql,发现做很多操作都提示以下信息,说明root密码已经失效了1
2mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
只要更新root密码,就能暂时使密码生效。但是发现另一个问题,由于MySQL存在密码策略的问题,当发现root密码过于简单,就会限制其操作。所以现在SET PASSWORD就无法执行了1
2
3mysql> SET PASSWORD=PASSWORD('123456');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> show variables like 'default_password_lifetime';
解决办法是,先修改密码策略1
2
3
4
5mysql> SET GLOBAL validate_password_policy=0;
mysql> SET GLOBAL validate_password_mixed_case_count=0;
mysql> SET GLOBAL validate_password_number_count=3;
mysql> SET GLOBAL validate_password_special_char_count=0;
mysql> SET GLOBAL validate_password_length=3;
再设置密码,设置永久生效1
2
3mysql> SET PASSWORD=PASSWORD('123456'); -- 密码生效
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; -- 密码永久有效
mysql> flush privileges; -- 配置立即生效
1.6. 设置MySQL服务开机自启动
设置mysqld开机自启动1
chkconfig mysqld on
查看运行级别1
2$ chkconfig --list | grep mysql
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
0/1/6是off状态,2~5是on状态,说明就是开机自启动的。1
2
3
4
5
6
7
8
9$ cat /etc/inittab # 查看运行级别说明
# ................
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
也可以通过ntsysv查看自启动的服务,前面是[*]的,代表已经设置为自启动1
ntsysv
Tab可以切换到Cancel退出
1.7. 查看MySQL相关目录
查看mysql进程1
2
3$ ps -ef | grep mysql
root 37916 1 0 09:44 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql 38110 37916 0 09:44 pts/1 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
你会看到--datadir=/var/lib/mysql,这说明/var/lib/mysql就是mysql数据库文件的存放路径
总的来説,与MySQL相关的有这几个路径
| 路径 | 说明 |
|---|---|
| /var/lib/mysql | 存放数据库文件 |
| /usr/share/mysql | 存放配置文件 |
| /usr/bin | 存放相关命令,如mysql、mysqladmin |
| /etc/init.d/mysqld | 启动关闭服务的脚本 |
| /var/run/mysqld/mysqld.pid | pid文件 |
1.8. 设置字符集
查看字符集变量,可以看到character_set_database和character_set_server默认都是latin1,这意味着,你往数据库中添加数据,如果是中文就会出现乱码
1 | mysql> SHOW VARIABLES LIKE '%char%'; |
编辑配置文件/etc/my.cnf,在对应位置设置以下内容1
2
3
4
5
6
7
8
9
10
11
12[mysqld]
# 忽略客户端字符集,只使用服务器的字符集配置
character-set-client-handshake=FALSE
# 服务器默认字符集
character-set-server=utf8mb4
# collation-server指定数据集如何排序,以及字符串的比对规则
collation-server=utf8mb4_unicode_ci
# init_connect指定连接到MySQL后就执行的SQL
init_connect=’SET NAMES utf8mb4’
[client]
# 指定客户端默认字符集
default-character-set=utf8mb4
重启mysql服务1
service mysqld restart
连接数据库,可以看到字符集已经修改了1
2
3
4
5
6
7
8
9
10
11
12
13
14mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------------------+----------------------------+
| Variable_name | Value |
+--------------------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| validate_password_special_char_count | 1 |
+--------------------------------------+----------------------------+
这里说明一点,utf8mb4是utf8的扩展。支持更多的字符,如emoji等。更推荐使用utf8mb4