centos7 安装 mysql8.0.16 单实例

参考链接

关闭selinux

修改 /etc/selinux/config,把

1SELINUX=enforcing

改为

1SELINUX=disabled

安装前要卸载 mariadb

查询 mariadb:

1rpm -qa | grep mariadb

卸载 mariadb:

1rpm -e mariadb-server-5.5.52-1.el7.x86_64
2rpm -e mariadb-libs-5.5.52-1.el7.x86_64

安装 mysql 依赖

1yum install gcc gcc-c++ openssl openssl-devel libaio libaio-devel  ncurses  ncurses-devel perl -y

如果是Ubuntu,则安装依赖:apt install libaio1 libaio-dev libncurses5 libncurses5-dev -y

创建mysql 用户和组,并设置禁止登陆系统

1groupadd mysql
2useradd -r -g mysql -s /bin/false mysql

下载 mysql,并解压

1wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz
2tar -xvJf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz -C /app

创建软连接

1ln -s /app/mysql-8.0.16-linux-glibc2.12-x86_64 /usr/local/mysql

配置环境变量

在 /etc/profile 在最后添加:

1export PATH=$PATH:/usr/local/mysql/bin

使环境变量生效:

1source /etc/profile

如果存在之前的 mysql 配置文件,删除(或移动)之:

1mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M`

创建数据目录,并修改数据目录的用户及用户组

1mkdir -p /app/mysqldata/3306/{data,logs,tmp}
2chown -R mysql:mysql /app/mysqldata/3306

初始化数据库(任选其一)

注意:本文以无密码初始化方式

有密码初始化

会在控制台输出临时密码,官方推荐该方式:

1mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/app/mysqldata/3306/data --initialize

无密码初始化

方便,但密码自行需要修改:

1mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/app/mysqldata/3306/data --initialize-insecure

设置 mysql (my.cnf)

新建 /app/mysqldata/3306/my.cnf,内容如下:

 1[client]
 2port=3306
 3socket=/app/mysqldata/3306/tmp/mysql.sock
 4[mysqld]
 5user=mysql
 6server-id=3306
 7port=3306
 8mysqlx_port=33060
 9basedir=/usr/local/mysql
10datadir=/app/mysqldata/3306/data
11plugin-dir=/usr/local/mysql/lib/plugin
12tmpdir=/app/mysqldata/3306/tmp
13socket=/app/mysqldata/3306/tmp/mysql.sock
14mysqlx_socket=/app/mysqldata/3306/tmp/mysqlx.sock
15pid-file=/app/mysqldata/3306/tmp/mysql.pid
16log-error=/app/mysqldata/3306/tmp/mysql-error.log
17character-set-server=utf8mb4
18collation-server=utf8mb4_unicode_ci
19
20# 如果是开发,下面的配置可以有效降低mysql的内存占用
21performance_schema_max_table_instances=400  
22table_definition_cache=400  
23table_open_cache=256
24performance_schema=off

一般来说,单实例只要设置mysqld中的 port、basedir、datadir、character-set-server 即可

启动数据库服务(任选其一)

以守护进程方式启动

1mysqld_safe --defaults-file=/app/mysqldata/3306/my.cnf & 

普通方式启动

1mysqld --defaults-file=/app/mysqldata/3306/my.cnf &

首次启动可能会出现一个错误:

1mysqld_safe error: log-error set to '/app/mysqldata/3306/tmp/mysql-error.log', however file don't exists. Create writable for user 'mysql'.

这是文件读写权限造成的错误,因此,我们可以手动创建/app/mysqldata/3306/tmp/mysql-error.log,然后修改其用户和用户组信息:

1echo '' >> /app/mysqldata/3306/tmp/mysql-error.log
2chown mysql:mysql /app/mysqldata/3306/tmp/mysql-error.log

然后再次运行启动数据库的命令。

首次登录方式

注:本文是以无密码初始化,所以首次登录不需要密码

1mysql -S /app/mysqldata/3306/tmp/mysql.sock

登录后,可修改 root 初始化密码:

1alter user 'root'@'localhost' identified with mysql_native_password by 'root';

创建 root@% 用于远程登录:

1create user 'root'@'%' identified by 'root';
2grant all privileges on *.* to 'root'@'%' with grant option;

刷新用户权限:

1flush privileges;

再次登录

上一步已经为 root 设置了密码,所以,如果退出后再次登录数据库,就需要携带密码进行登录:

1mysql -S /app/mysqldata/3306/tmp/mysql.sock -u root -p

关闭数据库服务

1mysqladmin shutdown -S /app/mysqldata/3306/tmp/mysql.sock -u root -p

问题汇总

mysql8 密码规则问题

默认情况下,创建的连接用户的密码规则为caching_sha2_password,该规则可能造成客户端连接时密码出错。
解决方法是,修改密码时指定密码规则为mysql_native_password,如:

1alter user 'root'@'localhost' identified with mysql_native_password by 'root';

或者一劳永逸,直接修改 mysql 的启动配置文件,在[mysqld]节点后追加:

1default-authentication-plugin=mysql_native_password

创建 /etc/my.cnf 的软连接

1ln -s /app/mysqldata/3306/my.cnf /etc/my.cnf

这只是一个建议
因为mysql在启动时、或者执行相关命令时,会优先读取该配置文件中的配置,所以启动mysql 不需要指定 –defaults-file;
同时,运行 mysqladmin、mysql等命令时,无需指定 sock 等配置;
但要注意:如果在同一机器上有多个mysql实例,则需要指定配置文件、或者sock来运行相关命令。

设置 mysql 服务开机启动

如果使用下面的方式,必须保证 /etc/my.cnf 存在

复制文件到启动目录

1cp /app/mysql-8.0.16-linux-glibc2.12-x86_64/support-files/mysql.server /etc/init.d/mysqld

确保 /etc/init.d/mysqld 可执行

添加开机服务,并查看服务状态

 1#### 添加 mysql 开机服务
 2chkconfig --add mysqld
 3
 4#### 开启 mysql 服务
 5chkconfig mysqld on
 6
 7#### 删除 mysql 开机服务
 8chkconfig --del mysqld
 9
10#### 列出 chkconfig 已知的、所有服务的详情
11chkconfig --list
12
13#### 只列出 mysql 的服务详情
14chkconfig --list mysqld

数据库服务的启动和关闭

1#### 启动数据库服务
2service mysqld start
3
4#### 关闭数据库服务
5service mysqld stop
6
7#### 重启数据库服务
8service mysqld restart

mysql 创建用户并授权

1create user 'zcily'@'%' identified with mysql_native_password BY 'loveYuRui@801';
2grant all privileges on *.* to 'zcily'@'%' with grant option;
3flush privileges;