Centos7 解压安装MYSQL8

都说MySql8.x比5.7快两倍,可以参考一下。
但不支持从 MySQL 8.0 降级到 MySQL 5.7(或从某个 MySQL 8.0 版本降级到任意一个更早的 MySQL 8.0 版本)。数据备份方式还是可以的。

  • 注意MySql8 的用户安全策略的改变
  • 注意MySql8 编码格式

这里安装的是MySql 8

下载地址:https://dev.mysql.com/downloads/mysql/8.0.html

我这里下载的是mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz

一、解压mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz

首先解压,输入mysql按tab补齐,/home/mysql是自己想要安装的目录.

没有权限用su输入root密码,用root执行。

tar -xvf报gz错误,就用tar -zxvf 解压命令

1
2
3
4
5
6
7
8
mkdir /opt/db
cd /opt/db
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.26-el7-x86_64.tar
tar -xvf mysql-8.0.26-el7-x86_64.tar
tar -zxvf mysql-8.0.26-el7-x86_64.tar.gz
#tar -xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
#mv mysql-8.0.13-linux-glibc2.12-x86_64 /home/mysql
cd /home/mysql

二、可以先把mariadb卸载了

mariadb其实与mysql是一样的,只不过mysql之父离开了Oracle,觉得依靠Oracle不靠谱,想做一个完全开源的数据库,这就是mariadb,mariadb的端口还是3306。

1
2
3
4
5
6
7
8
9
10
rpm -qa|grep mariadb
#mariadb-libs-5.5.60-1.el7_5.x86_64
rpm -e --nodeps mariadb-libs #tab补齐
#删除etc目录下的my.cnf文件
#可以先看一下my.cnf文件里面写的什么
cat /etc/my.cnf
#如果mariadb没有启动过,里面的文件夹和文件都不用看了,都是不存在的(也可以不删除,后面还会创建)
rm /etc/my.cnf
#检查mysql有没有安装
rpm -qa | grep mysql

三、检查mysql组和用户是否存在,如无创建

1
2
3
4
5
6
cat /etc/group | grep mysql 
cat /etc/passwd | grep mysql
#没有就u添加
groupadd mysql
useradd -g mysql mysql
passwd mysql

四、在/etc下创建my.cnf

编码在5.5.3以上都会支持utf8mb4(utf8 most byte 8),意思是支持4byte的不常用汉字和Emoji表情,毕竟65535还真的是不够用。

对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR

1
vim /etc/my.cnf

删除所有内容,添加下面内容

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]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
socket=/opt/db/mysql_data/mysql.sock
[mysqld]
skip-name-resolve
#设置3306端口
port = 3335
datadir=/opt/db/mysql_data
socket=/opt/db/mysql_data/mysql.sock
log-error=/opt/db/mysql_log/mysqld.log
pid-file=/opt/db/mysqld/mysqld.pid
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
#排序规则
collation-server=utf8mb4_0900_ai_ci
#utf8mb4_0900_ai_ci 排序规则:ai 口音不敏感 ci 不区分大小写 ,默认支持表情符号
#utf8mb4_0900_ai_ci 属于 utf8mb4_unicode_ci 中的一种
#utf8mb4_general_ci 没有实现utf8mb4_unicode_ci 的排序规则。没有utf8mb4_unicode_ci 准备。但是比较和排序的时候更快
# 创建新表时将使用的默认存储引擎,innodb支持事物
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
lc-messages-dir=/opt/db/mysql8/share

五、安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /opt/db/
mv mysql-8.0.26-el7-x86_64 mysql8
cd mysql8
#在mysql中添加data文件夹,init失败时,从这里开始
rm -rf /opt/db/mysql/
rm -rf /opt/db/mysqld/
rm -rf /opt/db/mysql_data
rm -rf /opt/db/mysql_log
mkdir -p /opt/db/mysql/
mkdir -p /opt/db/mysqld/
mkdir -p /opt/db/mysql_data
mkdir -p /opt/db/mysql_log
chown mysql:mysql /opt/db/ -R
chmod 777 -R /opt/db/mysqld
# 已经不用的命令
#bin/mysql_install_db --user=mysql --basedir=/home/mysql/ --datadir=/home/mysql/data/
# yum -y install numactl
bin/mysqld --initialize --user=mysql --datadir=/home/mysql-8.0.26-el7-x86_64/
# 查看错误日志
cat /opt/db/mysql_log/mysqld.log |grep ERROR

安装失败,可以看一下mysql 账户对/opt/db/mysql下的文件有没有读写权限

如果执行报错UTF8MB4,就把/etc/my.cnf的utf8换成UTF8MB4

六、连接

查看密码
1
cat /opt/db/mysql_log/mysqld.log |grep password

启动(&是放在后台执行)

1
2
bin/mysqld_safe --user=mysql &
bin/mysql -uroot -p

然后执行(但是如果使用无密码的方式登陆,就不可以使用下面令名)

1
2
3
4
5
6
alter user 'root'@'localhost' identified  by "123456";
# alter user 'root'@'localhost' identified WITH caching_sha2_password by "123456";
#创建远程连接
create user root@'%' identified by '123456';
grant all privileges on *.* to root@'%';
flush privileges;
无密码的方式,可用于找回密码。

配置文件 MySQL 免密码登录

编辑 MySQL 的配置文件

1
vim /etc/my.cnf

[mysqld]下添加

1
2
#在 [mysqld] 开头的下面一行加入下面这句
skip-grant-tables

修改密码(记得删除my.cnf文件的东西)

1
2
3
4
5
6
7
8
# 这里需要先刷新权限,不然会报错。
flush privileges;
alter user 'root'@'localhost' identified by "123456";
# alter user 'root'@'localhost' identified WITH caching_sha2_password by "123456";
#创建远程连接
create user root@'%' identified by '123456';
grant all privileges on *.* to root@'%';
flush privileges;

或者

1
2
3
bin/mysql 
use mysql;
update user SET Password = 'new-password' WHERE User = 'root';

七、后续操作

创建软连接
1
ln -s /home/mysql/bin/* /usr/local/bin/

/usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。

添加系统环境变量
1
vim /etc/profile

加入配置

添加服务

将服务文件拷贝到init.d下,并重命名为mysqld
cp support-files/mysql.server /etc/init.d/mysqld
赋予可执行权限
chmod +x /etc/init.d/mysqld
添加服务
chkconfig --add mysqld
关闭firewall,安装iptables可选(比如服务器就需要开放3306)

本文地址: Centos7 解压安装MYSQL8

推荐

MySQL8.0创建用户及其配置
MySQL8.0新特性-新的索引方式
MySQL8.0新特性-通用表表达式(CTE)
MySQL8.0新特性-窗口函数
MySQL8.0新特性-InnoDB增强
MySQL8.0新特性-JSON增强
[官方介绍]([https://dev.mysql.com/doc/refman/8.0/en/create-index.html#create-index-functional-key-parts

本文地址: https://github.com/maxzhao-it/blog/post/26542/