1. 配置空白CentOS7
1.1 克隆Linux
1.2 修改Linux的配置
1.2.1 修改mac地址
1.2.2 修改主机名
执行命令vim /etc/hostname
然后修改名字即可。
1.2.3 修改IP地址和UUID
执行命令vim /etc/sysconfig/network-scripts/ifcfg-ens32
然后修改其中的ip地址
和uuid
。然后重启网络systemctl restart network
即可。
2. 安装包
官网下载:https://dev.mysql.com/downloads/mysql/然后解压,留下其中最重要的6个文件:
3. 安装
3.1 安装前检查依赖
- 检查
/tmp
临时目录权限(必不可少)
由于MySQL安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限,执行:
chmod -R 777 /tmp
- 安装前检查依赖
如果不存在需要到centos安装盘里进行安装。如果安装图形化界面,这些都有。rpm -qa | grep libaio
rpm -qa | grep net-tools
3.2 正式安装
严格按照顺序安装:
rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm
# 执行到第三条的时候会失败,因为Linux自带MariaDB,卸载之后重新执行第三条安装即可
yum remove mysql-libs
rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm
然后执行如下命令查看是否安装成功:
mysql --version
# 或者
mysqladmin --version
# -i忽略大小写查看是否安装成功
rpm -qa | grep -i mysql
4. 服务初始化
为了保证数据库目录与文件的所有者为mysql登录用户,如果你是以root身份运行MySQL服务,需要执行下面的命令初始化:
mysqld --initialize --user=mysql
说明:—initialize选项默认以“安全”模式来初始化,则会为root用户生成一个密码并将该密码记为过期
,登录后需要设置一个新密码。生成的临时密码
会往日志中记录一份。查看密码:
cat /var/log/mysqld.log
启动mysqld:
# mysqld或者mysqld.service都是可以的
systemctl start mysqld
# 查看启动状态
systemctl status mysqld
# 查看是否设置自启动,默认是enabled
systemctl list-unit-files | grep mysqld.service
# 如果不是enabled,运行如下命令设置自启动
systemctl enable mysqld.service
# 关闭自启动
systemctl disable mysqld.service
启动mysql客户端,进入mysql
# 这里-p后面跟在mysqld.log文件中看到的密码
mysql -uroot -p
# 执行show databases;语句后会提示要求改密码:
alter user 'root'@'localhost' identified by 'abc123';
5. 远程连接
5.1 确认网络
- 在远程机器上使用
ping ip
地址保证网络畅通
。 - 在远程机器上使用
telnet
命令保证端口号开放访问
。 - 如果连接不同可以直接关闭防火墙:
systemctl stop firewalld
。或者开放3306端口。 - Linux防护墙端口相关
```shell
查看开放的端口号
firewall-cmd —list-all设置开放的端口号
firewall-cmd —add-service=http —permanent firewall-cmd —add-port=3306/tcp —permanent重启防火墙
firewall-cmd —reload
修改登录范围,这样就可以在外网使用root用户访问mysql。
```shell
# 在user库的user表下:
select host, user from user;
# 可以看到root用户的host为localhost,也就是仅允许本机登录,修改为'%'
update user set host='%' where user='root';
# 修改成功之后一定要执行刷新权限的操作
flush privileges;
# 如果出现加密算法问题,修改加密的方式,8.0的版本用了新版的加密方式。
alter user 'root'@'%' identified with msyql_native_password by 'abc123';
6. MySQL8的密码强度评估
6.1MySQL8设置密码可能出现的问题
mysql> alter user 'root' identified by 'abcd1234'; # HelloWorld_123
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
6.2 MySQL8之前的安全策略
在MySQL8.0之前,使用的是validate_password插件检测、验证账号密码强度,保障账号的安全性。
6.2.1 安装/启用插件方式1:在my.cnf文件中添加参数
[mysqld]
plugin-load-add=validate_password.so
\#ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用)
validate-password=FORCE_PLUS_PERMANENT
:::info
说明1:plugin library中的validate_password文件名的后缀名根据平台不同有所差异。 对于Unix和 Unix-like系统而言,它的文件后缀名是.so,对于Windows系统而言,它的文件后缀名是.dll。
说明2:修改参数后必须重启MySQL服务才能生效。
说明3:参数FORCE_PLUS_PERMANENT是为了防止插件在MySQL运行时的时候被卸载。当你卸载插 件时就会报错。如下所示。
:::
6.2.2 方式2:运行时命令安装(推荐)
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected, 1 warning (0.11 sec)
此方法也会注册到元数据,也就是mysql.plugin表中,所以不用担心MySQL重启后插件会失效。
7. 卸载
# 1. 关闭mysql服务
systemctl stop mysqld.service
# 2. 查看当前mysql安装状况
rpm -qa | grep -i mysql
# 或者
yum list installed | grep mysql
# 3. 卸载上述命令查询出的已安装程序
yum remove mysql-xxx mysql-xxx
# 4. 删除mysql相关文件
find / -name mysql
rm -rf xxx
rm -rf /etc/my.cnf
8. 修改字符集
在MySQL8.0之前,默认字符集为latin1
,字符集utf8
实际指向的是utf8mb3
。一般开发人员会将字符集修改为utf8
。MySQL8.0开始,默认编码是utf8mb4
。
8.1 查看默认字符集
show variables like 'character%';
-- 或者
show variables like '%char%';
8.2 修改字符集
vim /etc/my.cnf
# mysql5.7之前添加如下到my.cnf文件中
character_set_server=utf8
# mysql8.0则可以不做修改
# 重启服务
systemctl restart mysqld
# 但是已有数据库和表不会发生变化。
8.3 变更已有数据库表
-- 修改已创建数据库字符集
alter database dbtest1 character set 'utf8';
-- 修改已有表字符集
alter table tabletest1 convert to character set 'urf8';
-- 但是原有的数据如果是用非'utf8'编码的话,数据本身编码不会发生改变。已有数据需要导
-- 出或删除,然后重新插入。
8.4 各级别字符集
MySQL有四个级别的字符集和比较规则:
- 服务器级别
- 数据库级别
- 表级别
- 列级别
执行如下SQL语句可以查看字符集:
show variables like 'character%';
-- 执行结果
-- character_set_server:服务器级别的字符集
-- character_set_database:当前数据库的字符集
-- character_set_client:服务器解码请求时使用的字符集
-- character_set_connection:服务器处理请求时会把请求字符串从character_set_client转为
-- character_set_connection
-- character_set_results:服务器向客户端返回数据时使用的字符集
8.4.1 服务器级别
在启动服务器程序时通过启动选项或者在服务器程序运行过程中使用 SET 语句修改这两个变量的值。比如可以在配置文件中这样写:
[server]
character_set_server=gbk # 默认字符集
collation_server=gbk_chinese_ci #对应的默认的比较规则
8.4.2 数据库级别
在创建和修改数据库的时候可以指定该数据库的字符集和比较规则,具体语法如下:
CREATE DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
ALTER DATABASE 数据库名
[[DEFAULT] CHARACTER SET 字符集名称]
[[DEFAULT] COLLATE 比较规则名称];
8.4.3 表级别
在创建和修改表的时候指定表的字符集和比较规则,语法如下:
CREATE TABLE 表名 (列的信息)
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]]
ALTER TABLE 表名
[[DEFAULT] CHARACTER SET 字符集名称]
[COLLATE 比较规则名称]
8.4.4 列级别
对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则。在创建和修改列定义的时候可以指定该列的字符集和比较规则,语法如下:
CREATE TABLE 表名(
列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
其他列...
);
ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
:::info 在转换列的字符集时需要注意,如果转换前列中存储的数据不能用转换后的字符集进行表示会发生 错误。 :::