Centos7安装配置MySQL 8.0+
准备工作
1.查看是否有安装过mysql
rpm -qa | grep -i mysql
2.删除mysql
yum -y remove MySQL-*
一般用rpm -e 的命令删除mysql,这样表面上删除了mysql,可是mysql的一些残余程序仍然存在,并且通过第一步的方式也查找不到残余,而yum命令比较强大,可以完全删除mysql.(ps:用rpm删除后再次安装的时候会提示已经安装了,这就是rpm没删除干净的原因)
3.把所有出现的目录统统删除
find / -name mysql
查找mysql的一些目录,把所有出现的目录删除,可以使用rm -rf 路径,删除时请注意,一旦删除无法恢复。
4.删除配置文件
rm -rf /etc/my.cnf
5.删除mysql的默认密码
rm -rf /root/.mysql_sercret
删除mysql的默认密码,如果不删除,以后安装mysql这个sercret中的默认密码不会变,使用其中的默认密码就可能会报类似Access denied for user ‘root@localhost’ (using password:yes)的错误.
五步完成之后,这样mysql就全部删除干净了,若没安装过mysql可忽略以上步骤
1.配置Mysql 8.0安装源
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2.在运行安装程序之前导入密钥:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
3.安装Mysql 8.0
sudo yum --enablerepo=mysql80-community install mysql-community-server -y
看到complet(完毕)就是安装完啦
配置MySQL
vi /etc/selinux/config
SELINUX=disabled
mkdir -p /var/log/mysql
chown mysql:mysql /var/log/mysql/*
chown -R mysql:mysql /var/lib/mysql/
# 设置目录属主为 mysql 用户
sudo chown -R mysql:mysql /var/log/mysql
# 设置目录权限为 755(确保 MySQL 有写入权限)
sudo chmod -R 755 /var/log/mysql
- my.cnf文件:
vi /etc/my.cnf
[mysqld]
#不区分大小写
lower_case_table_names=1
# 允许最大连接数
max_connections = 1000
# 允许最大同时连接数
max_user_connections = 500
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 允许服务端使用的最大内存
max_allowed_packet = 1024M
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
# 数据存放目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address=0.0.0.0
event_scheduler=ON
slow_query_log = ON
# 慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
innodb_buffer_pool_size = 6G
default-authentication-plugin=mysql_native_password
server-id=10
log-bin=/var/lib/mysql/mysql-bin
max_connect_errors=1000
#日志及进程数据的存放目录
log-error=/var/log/mysql/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
4.启动mysql服务
mysqld --initialize
systemctl start mysqld
显示如下:
启动完成
5.查看mysql服务运行状态
service mysqld status
6.查看root临时密码
安装完mysql之后,会生成一个临时的密码让root用户登录
grep "A temporary password" /var/log/mysql/mysqld.log
7.更改临时密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '1q2w#E$R';
FLUSH PRIVILEGES;
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1q2w#E$R';
FLUSH PRIVILEGES;
8.修改权限
mysql> SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
+-----------+---------------+------------+------------+
| host | user | Grant_priv | Super_priv |
+-----------+---------------+------------+------------+
| localhost | root | Y | Y |
| localhost | mysql.session | N | Y |
| localhost | mysql.sys | N | N |
| % | root | Y | Y |
| localhost | mysqladmin | Y | Y |
+-----------+---------------+------------+------------+
5 rows in set (0.00 sec)
mysql> UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
备用改密方案
先看看当前的密码验证策略
SHOW VARIABLES LIKE 'validate_password.%';
策略说明
validate_password.length 是密码的最小长度,默认是8,我们把它改成6
输入:set global validate_password.length=6;
validate_password.policy 验证密码的复杂程度,我们把它改成0
输入:set global validate_password.policy=0;
validate_password.check_user_name 用户名检查,用户名和密码不能相同,我们也把它关掉
输入:set global validate_password.check_user_name=off;
再执行修改密码的命令
输入:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘12345’;
密码设成功
用mysql客户连接报不允许连接的错误,那是因为没开通远程访问的权限
- 将MySQL设置为开机自启动:
sudo service mysqld stop
sudo service mysqld start
systemctl enable mysqld
systemctl status mysqld
关闭防火墙(看情况操作)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
Ubuntu安装配置MySQL 8.0+
在 Ubuntu 系统中,默认是通过 .deb
包或者 APT 仓库管理软件的,因此无法像 CentOS 一样通过 rpm
安装 MySQL
。以下是一个修订版的安装教程,重点改动为先修改 my.cnf
,然后再进行服务的初始化。
在Ubuntu 22.04上安装和配置MySQL 8.0 (支持 lower_case_table_names
配置)
1. 更新系统
#1、更新安装包管理工具
sudo apt-get update
2. 安装依赖
sudo apt-get install mysql-server
3. 安装MySQL服务器
sudo apt install mysql-server -y
sudo systemctl stop mysql
停止自动启动的服务以便后续修改配置。
4. 编辑my.cnf
并配置lower_case_table_names
MySQL 初始化前必须设置 lower_case_table_names
配置,否则后续无法更改:
确保 /var/log/mysql
目录存在并且具有正确的权限:
sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql
sudo chmod 755 /var/log/mysql
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
添加以下内容到文件中:
[mysqld]
bind-address=0.0.0.0
#不区分大小写
lower_case_table_names=1
# 允许最大连接数
max_connections = 1000
# 允许最大同时连接数
max_user_connections = 500
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 允许服务端使用的最大内存
max_allowed_packet = 1024M
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
5. 初始化 MySQL 数据目录
-
停止 MySQL 服务
确保没有其他服务在使用mysqld
:sudo systemctl stop mysql sudo pkill -9 mysqld
-
清空数据目录
删除/var/lib/mysql/
下的所有文件和子目录:sudo rm -rf /var/lib/mysql/* sudo chown -R mysql:mysql /var/lib/mysql
-
初始化
尝试执行初始化命令:sudo mysqld --initialize --user=mysql --log-error=/var/log/mysql/error.log
6. 启动 MySQL 服务
sudo systemctl start mysql
sudo systemctl enable mysql
7. 查看临时密码并登录
执行以下命令查看临时密码:
sudo grep "temporary password" /var/log/mysql/error.log
lsof -i :3306
使用临时密码登录 MySQL:
mysql -u root -p
8. 修改 root 密码并开启远程登录
修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '1q2w#E$R';
FLUSH PRIVILEGES;
创建允许远程登录的账户:
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1q2w#E$R';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
9. 验证配置生效
登录 MySQL 并检查参数是否正确:
SHOW VARIABLES LIKE 'lower_case_table_names';
预期输出:
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
10. 设置防火墙规则或关闭防火墙(可选)
开启3306端口:
sudo ufw allow 3306
sudo ufw reload
或者关闭防火墙:
sudo ufw disable
到此为止,MySQL 8.0 已在 Ubuntu 22.04 环境下成功安装,lower_case_table_names=1
配置已经生效,并且完成了服务的初始化。