采用二进制方式免编译安装MySQL,适合各类MySQL产品系列,不需要复杂的编译设置和编译时间等待,直接解压下载的软件包,初始化即可完成MySQL的安装和启动.
1、准备工作
-
依赖环境
-
关闭防火墙
systemctl stop firewalld.service
-
MySQL依赖于
libaio
库
yum search libaio
yum install libaio
-
-
下载,解压,重命名
个人喜好将所有下载的软件放至目录
/data/soft/
个人喜好将所有软件安装在目录:/data/important-software/
以上软件和安装目录各新建目录mysql;/data/soft/mysql
/data/important-software/mysql/
再到目录/data/important-software/mysql/
分别新建MySQL的主程序目录和数据目录
主程序目录:/data/important-software/mysql/mysql-base/
数据目录:/data/important-software/mysql/mysql-data
配置文件目录:/data/important-software/mysql/mysql-base/etc/
PID目录:/data/important-software/mysql/mysql-data/pid
下载:
cd /data/soft/
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar
tar -zxvf mysql-8.0.11-linux-glibc2.12-x86_64.tar
tar -zxvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
cp -r /data/soft/mysql/mysql-8.0.11-linux-glibc2.12-x86_64/* /data/important-software/mysql/mysql-base/
解压目录内容
bin
mysqld服务器,客户端和实用程序
data
日志文件,数据库
docs
MySQL手册信息格式
man
Unix手册页
include
包含(标题)文件
lib
库
share
其他支持文件,包括错误消息,示例配置文件,用于数据库安装的SQL
2. 安装MySQL
-
新建用户组和用户
cd /data/important-software/mysql/mysql-base/
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
-
初始化MySQL
在初始化之前,必须将新的my.cnf配置完成,以及将系统自动重启文件进行修改。
- 配置文件
- 删除etc下的my.cnf
rm /etc/my.cnf
- 将准备好的配置文件(下文最下方)放至目录
/data/important-software/mysql/mysql-base/etc/
- 将配置文件进行软链接到目录/etc下;
ln -s /data/important-software/mysql/mysql-base/etc/my.cnf /etc/my.cnf
- 自启动文件
- 复制自启动文件到系统init.d目录:
cp /data/important-software/mysql/mysql-base/support-files/mysql.server /etc/init.d/mysql.server
将原来的:
basedir=
datadir=
```
修改为:
```
basedir=/data/important-software/mysql/mysql-base
datadir=/data/important-software/mysql/mysql-data
```
3. 将原来的:
```
mysqld_pid_file_path=
if test -z "$basedir"
then
basedir=/usr/local/mysql
bindir=/usr/local/mysql/bin
if test -z "$datadir"
then
datadir=/usr/local/mysql/data
fi
sbindir=/usr/local/mysql/bin
libexecdir=/usr/local/mysql/bin
else
bindir="$basedir/bin"
if test -z "$datadir"
then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
fi
```
修改为:
```
mysqld_pid_file_path=
if test -z "$basedir"
then
basedir=/data/important-software/mysql/mysql-base
bindir=/data/important-software/mysql/mysql-base/bin
if test -z "$datadir"
then
datadir=/data/important-software/mysql/mysql-data
fi
sbindir=/data/important-software/mysql/mysql-base/bin
libexecdir=/data/important-software/mysql/mysql-base/bin
else
bindir="$basedir/bin"
if test -z "$datadir"
then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
fi
```
3. 初始化MySQL
`/data/important-software/mysql/mysql-base/bin/mysqld --initialize --user=mysql --basedir=/data/important-software/mysql/mysql-base --datadir=/data/important-software/mysql/mysql-data`
***注意密码***
4. mysql临时密码
> [注意]root@localhost生成临时密码:`;b;s;)/rn6A3`,也就是`root@localhost:`后的字符串
> 示例
```
2017-08-26T03:23:35.368366Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-08-26T03:23:35.748679Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-08-26T03:23:35.793190Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-08-26T03:23:35.848286Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: f210c54b-8a0d-11e7-abbd-000c29129bb0.
2017-08-26T03:23:35.848889Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-08-26T03:23:35.849421Z 1 [Note] A temporary password is generated for root@localhost: ;b;s;)/rn6A3
```
5. 生成RSA私钥,可以跳过此步骤
mysql_ssl_rsa_setup需要openssl支持,用于启用数据量ssl连接,需要进一步配置。

`/data/important-software/mysql/mysql-base/bin/mysql_ssl_rsa_setup`
6. 对之前创建的MySQL主程序目录和数据目录授权
1. `chown -Rf mysql.mysql /data/important-software/mysql`
2. `chmod 750 /data/important-software/mysql`
## 3. 启动MySQL服务
**启动脚本有两个分别是:**
`/data/important-software/mysql/mysql-base/bin/mysqld_safe`
`/etc/init.d/mysqld`
1. 启动方式一
`/data/important-software/mysql/mysql-base/bin/mysqld_safe --user=mysql &`
2. 启动方式二
`service mysql.server start` 或者 `/etc/init.d/mysqld start`
## 设置MySQL密码
登陆成功后,设置MySQL密码
`ALTER USER 'root'@'localhost' identified by '输入的密码;` 或 `set password=password("输入的密码");`
刷新权限
`flush privileges;`
在MySQL安装目录的 bin 目录下执行命令:
mysql -u root -p
这时候会提示输入密码,记住了上面第1.3步安装时的密码,填入即可登录成功,进入MySQL命令模式。
在MySQL8.0.4以前,执行
`SET PASSWORD=PASSWORD('[修改的密码]');` 就可以更改密码,
***但是MySQL8.0.4开始,这样默认是不行的。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。***
因为当前有很多数据库工具和链接包都不支持“caching_sha2_password”,为了方便,我暂时还是改回了“mysql_native_password”认证插件。
修改用户密码,在MySQL中执行命令:
`ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';`
修改密码验证插件,同时修改密码。
如果想默认使用“mysql_native_password”插件认证,可以在配置文件中配置default_authentication_plugin项。[下面的my.cnf已修改好了]
[mysqld]
default_authentication_plugin=mysql_native_password
## mysql8创建远程连接账户
mysql8和原来的版本有点不一样,8的安全级别更高,所以在创建远程连接用户的时候,
不能用原来的命令(同时创建用户和赋权):
mysql>grant all PRIVILEGES on *.* to test@'localhost' identified by '123456';
***必须先创建用户***
>(密码规则:mysql8.0以上密码策略限制必须要大小写加数字特殊符号):
`create user '输入的用户'@'%' identified by '输入的密码;`
***再进行赋值:***
`grant all privileges on *.* to '输入的用户'@'%' with grant option;`
***最后刷新一下:***
`flush privileges;`
当你进行远程连接是,会出现这样的错误:
Unable to load authentication plugin 'caching_sha2_password'.
是因为mysql8使用的是caching_sha2_password加密规则,最简单的方法是修改远程连接用户的加密规则:
`ALTER USER '输入的用户'@'%' IDENTIFIED WITH mysql_native_password BY '输入的密码';`