下面是在Alibaba Cloud Linux 3系统下安装MySQL的详细步骤,Alibaba Cloud Linux 3是基于CentOS 7(EL7)的发行版,因此安装步骤与CentOS7一样的。
官方文档:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
一、MySQL安装步骤
运行以下命令,更新并添加MySQL官方的YUM源
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-11.noarch.rpm
运行以下命令,安装MySQL
yum install -y mysql-community-server
注意默认是8.0版本的(可以通过
yum repolist all | grep mysql
查看),如果需要安装5.7版本的通过如下命令切换:
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
修改MySQL的启动端口
修改MySQL的启动端口,MySQL的默认端口是3306,要修改启动端口需要修改配置文件,默认配置文件在 /etc/my.cnf
中,可以通过如下命令来修改:
vim /etc/my.cnf
在里面添加如下内容:
[mysqld]
port = 3307
之后需要重启MySQL服务,才能生效
systemctl restart mysql
二、启动MySQL服务
运行以下命令,启动MySQL服务
systemctl start mysqld
查看MySQL服务状态
systemctl status mysqld
设置MySQL开机启动
systemctl enable mysqld
三、配置MySQL
启动成功后,如果是第一次安装那么可以通过如下命令来获取初始密码(必须登陆进去修改密码)
MySQL在第一次启动成功后会进行数据库初始化,并会自动生成一个随机密码,并输出到日志中。
运行以下命令,查看MySQL的初始密码
grep 'temporary password' /var/log/mysqld.log
MySQL的验证密码插件是默认安装的。其要求密码至少包含一个大写字母、一个字母、一个数字和一个特殊字符,密码总长度至少为8个字符。
修改初始密码
可以直接使用如下命令来登陆MySQL,然后修改密码
# 登陆
mysql -uroot -p
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '设置你自己的密码';
也可以通过MySQL密码修改插件来修改,执行如下命令进行root密码的修改
mysql_secure_installation
根据提示信息输入相关内容即可
Enter password for user root: #输入已获取的root用户初始密码
The existing password for the user account root has expired. Please set a new password.
New password: #输入新的MySQL密码
Re-enter new password: #重复输入新的MySQL密码
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :Y #输入Y选择更新MySQL密码。您也可以输入N不再更新MySQL密码。
New password: #输入新的MySQL密码
Re-enter new password: #重复输入新的MySQL密码
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :Y #输入Y确认使用已设置的密码。
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :Y #输入Y删除MySQL默认的匿名用户。
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :Y #输入Y禁止root远程登录,其他则允许远程登陆
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :Y #输入Y删除test库以及对test库的访问权限。
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :Y #输入Y重新加载授权表。
Success.
All done!
修改密码
如果你安装过MySQL压缩包版的,一定知道MySQL的配置是在一个叫my.cnf文件中;
vim /etc/my.cnf
然后在里面加入如下配置(跳过密码验证,修改密码后记得将其移除然后重启MySQL)
skip-grant-tables
注意:如果修改了my.cnf文件,需要重启MySQL服务才能生效。
修改密码(方式一);这种方式相当于将其回到初始安装状态,这样我们重新登陆的时候就会要求输入密码了
# 将密码设置为空
update user set authentication_string='' where user='root';
# 重新设置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '设置你自己的密码';
修改密码(方式二);这种方式需要修改密码验证规则
use mysql;
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
修改密码规则
对应开发环境来说,只需要简单密码即可;因此需要修改相关密码配置;查看mysql 密码策略相关参数;
SHOW VARIABLES LIKE 'validate_password%';
关于 mysql 密码策略相关参数:
- validate_password_length 固定密码的总长度;
- validate_password_dictionary_file 指定密码验证的文件路径;
- validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
- validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
- validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;关于 validate_password_policy 的取值:
- 0/LOW:只验证长度;
- 1/MEDIUM:验证长度、数字、大小写、特殊字符;
- 2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
- validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
下面是修改密码策略的示例,其意思是:密码至少6位,且不区分大小写,不包含数字,不包含特殊字符,不包含字母都行。
set GLOBAL validate_password.length=6;
set GLOBAL validate_password.mixed_case_count=0;
set GLOBAL validate_password.number_count=0;
set GLOBAL validate_password.policy=LOW;
set GLOBAL validate_password.special_char_count=0;
配置MySQL远程访问
默认情况下,MySQL只允许本地访问,因此需要配置MySQL远程访问。
use mysql;
update user set host="%" where user="root";
查看当前用户信息
use mysql;
select host, user, authentication_string, plugin from user;
创建MySQL账号
针对于安全考虑,我们通常对数据库的读写权限进行限制,因此需要创建一个MySQL账号。 要创建一个只能进行数据库读写操作的MySQL账号,可以按照以下步骤执行:
- 首先,登录到MySQL服务器上的root账号或具有管理员权限的账号。
- 执行以下命令以创建一个新的MySQL用户,并授予该用户对特定数据库的读写权限:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'username'@'localhost'; FLUSH PRIVILEGES;
在上面的命令中:
- ‘username’ 是您要创建的新用户的名称。
- ‘password’ 是该用户的密码。
- ‘database_name’ 是您要授予权限的数据库名称。您可以将其替换为您要授予权限的实际数据库名称。通常情况下,将其替换为*表示适用于所有数据库。
- SELECT, INSERT, UPDATE, DELETE 是您希望为该用户授予的操作权限。您可以根据需要添加或删除其他权限,如CREATE, DROP, ALTER等。
- 最后,通过执行FLUSH PRIVILEGES;来刷新MySQL的权限缓存,使新的权限设置生效。