Linux 下安装 MySQL
1、准备 mysql 安装包,可以进入 官网,自行选择需要的版本进行下载,我下载的是 mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
2、将本地的安装包上传到 linux 服务器上,我这里放在 /home/software 目录下
3、卸载系统自带的 mariadb,如果有的话
rpm -qa | grep mariadb
使用 yum -y remove 将出现的 mariadb 相关全部卸载
[root@xxx docker]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
yum -y remove mariadb-libs-5.5.68-1.el7.x86_64
4、解压 mysql 安装包到 /usr/local,并将文件夹重命名为 mysql
tar -zxvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local
mv /usr/local/mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/mysql
5、创建 mysql 用户和用户组
groupadd mysql
useradd -g mysql mysql
6、在 mysql 根目录下新建一个文件夹 data,用于存放数据
mkdir /usr/local/mysql/data
7、修改 mysql 目录的归属用户
chown -R mysql.mysql /usr/local/mysql/
8、准备 mysql 的配置文件
cd /etc
vim my.cnf
写⼊如下简化配置
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
# 设置3306端口
port = 3306
socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
9、创建 /var/lib/mysql 目录,并修改权限
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
10、正式开始安装 mysql,这里注意记录一下系统生成的密码
cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
记录自己的密码,我这里是 b;(qQt*fe7zg
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: b;(qQt*fe7zg
11、复制启动脚本到资源目录
cp ./support-files/mysql.server /etc/init.d/mysqld
12、修改 /etc/init.d/mysqld ,修改其 basedir 和 datadir 为实际对应目录
vim /etc/init.d/mysqld
修改内容
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
13、设置 mysql 系统服务并开启自启动
# 增加 mysqld 服务控制脚本执⾏权限
chmod +x /etc/init.d/mysqld
# 将 mysqld 服务加⼊到系统服务
chkconfig --add mysqld
# 检查 mysqld 服务是否已经⽣效
chkconfig --list mysqld
14、将 mysql 的 bin 目录加入 PATH 环境变量
vim /etc/profile
追加内容
export PATH=/usr/local/mysql/bin:$PATH
15、刷新配置文件
source /etc/profile
16、启动和停止 mysqld
# 启动
service mysqld start
# 停止
service mysqld stop
# 查看 mysql 服务状态
systemctl status mysqld
# 重启 mysql 服务
systemctl restart mysqld
17、首次登陆 mysql,以 root 账户登录 mysql ,使用之前记录的密码进行登录
mysql -u root -p
18、接下来修改 root 账户密码,
# 在mysql的命令⾏执⾏如下命令即可,密码可以设置成自己的密码
mysql>alter user user() identified by "123456";
mysql>flush privileges;
19、设置允许远程主机登录
mysql> use mysql;
mysql> update user set user.Host='%' where user.User='root';
mysql> flush privileges;
20、测试远程连接数据库,例如,可以使用 idea 中的数据库 测试连接
21、另外测试使用 sqlyog 进行连接,发现报错。
Client does not support authentication protocol requested by server;consider upgrading MysQL client
原因是 mysql 8.0 的加密规则是 caching_sha2_password,而之前版本的加密规则是 mysql_native_password。
需要进行如下修改。
(1)进入 mysql 查看
[root@xxx mysql]# mysql -uroot -p
Enter password:
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 切换数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 查看加密规则
mysql> select host,user,plugin from user;
| host | user | plugin |
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | mysql_native_password |
| localhost | mysql.session | mysql_native_password |
| localhost | mysql.sys | mysql_native_password |
(2)修改加密规则
# 密码设置为自己的密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql> flush privileges;
(3)重新查看,发现已经修改成功
mysql> select host,user,plugin from user;
| host | user | plugin |
| % | root | mysql_native_password |
| localhost | mysql.infoschema | mysql_native_password |
| localhost | mysql.session | mysql_native_password |
| localhost | mysql.sys | mysql_native_password |
(4)再次测试连接 sqlyog,发现连接成功。
22、mysql 权限设置语句
use mysql;
select user, host from user;
CREATE USER 'root'@'xxx.xxx.xxx.xxx' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'xxx.xxx.xxx.xxx' with grant option;
update user set host = 'xxx.xxx.%.%' where user = 'root' and host = 'xxx.xxx.xxx.xxx';
flush privileges;