CentOS7安装MySQL8.0.28

258 阅读2分钟

最近公司竞标一个项目,要在客户环境中部署一套POC环境,客户用的是麒麟系统,登录后发现和CentOS7差不多,把部署MySQL的过程记录一下

下载并上传到时服务器

scp mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 108:/opt/soft_packages

安装前的准备

参考

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

cd /usr/local
tar xvf /opt/soft_packages/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz
ln -s mysql-8.0.28-linux-glibc2.12-x86_64 mysql

cd mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

初始化数据库实例

bin/mysqld --initialize --user=mysql
# 这一步会生成一个临时密码
# 2023-03-18T08:35:57.640666Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: &%)Jj<orr9lt

启动数据库

bin/mysql_ssl_rsa_setup
bin/mysqld_safe --user=mysql &
# Next command is optional
cp support-files/mysql.server /etc/init.d/mysql.server

登录并改密码

# 登录
./mysql -uroot -h 127.0.0.1 -p

# 改密码
# 1 in skip-grant-tables mode and in mysqld_safe
update mysql.user set authentication_string=root where User='root';
flush privileges;
exit;

# 2 in mysql(in skip-grant-tables mode or not)
alter user 'root'@'localhost' identified with caching_sha2_password by 'root';

MySQL小知识

MySQL管理用户

中# 查看当前用户
desc mysql.user;
select User, Host from mysql.user;

# 创建用户
CREATE USER zhang3 IDENTIFIED BY '123123';  # 默认host是 %
CREATE USER 'kangshifu'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'root'@'%' IDENTIFIED BY 'root';

# 修改用户
UPDATE mysql.user SET USER='li4' WHERE USER='wang5';
FLUSH PRIVILEGES;

# 删除用户
# 1使用drop
DROP USER li4 ;  # 默认删除host为%的用户
DROP USER 'kangshifu'@'localhost';

# 2使用delete,需要执行flush使其生效
# 不推荐通过DELETE FROM USER u WHERE USER='li4' 进行删除,系统会有残留信息保留。而drop user命令会删除用户以及对应的权限,执行命令后你会发现mysql.user表和mysql.db表的相应记录都消失了。
DELETE FROM mysql.user WHERE Host='localhost' AND User='Emily';
FLUSH PRIVILEGES;

权限管理

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

让其他主机能访问MySQL服务

# 查看防火墙服务是否开启
systemctl status firewalld

# 查看允许通过的服务
firewall-cmd --permanent --list-all

# 放开3306端口
firewall-cmd --permanent --add-port=3306/tcp

# 使操作生效
firewall-cmd --reload

安装过程中遇到的问题

问题1

问题1

[root@poc bin]# ./mysqld --initialize --user=mysql
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决:

  • 根据内容缺少了libaio.so.1的依赖库,所以进行安装
  • yum install -y libaio

问题2

问题2

[root@poc mysql]# bin/mysqld_safe --user=mysql &
[1] 10771
[root@poc mysql]# 2023-03-18T08:38:16.242300Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.

解决:

  • 权限问题
mkdir /var/log/mariadb 
touch /var/log/mariadb/mariadb.log 
chown -R mysql:mysql  /var/log/mariadb/

问题3

问题3

[root@poc mariadb]# tail -1 /var/log/mariadb/mariadb.log
2023-03-18T08:51:12.680039Z 0 [ERROR] [MY-011811] [Server] Can't start server: can't check PID filepath: No such file or directory

解决:

  • 权限问题
# 找到pid的存储位置
cat /etc/my.cnf

# 修改其对象的权限
mkdir -p /var/run/mariadb
chown -R mysql:mysql /var/run/mariadb/