Linux离线安装MySQL详解
本教程为测试环境,出于安全性考虑,在生产运行环境下应做到:
不应当给root用户开启远程登录权限。
给用户赋权时,应当根据用户的需求,做到权限细分,如限定登录的ip地址,在grant命令中只开放select、update的权限等。
不设置弱密码
一、离线安装MySQL
以CentOS为例
-
检查是否已安装mysql
rpm -qa | grep mysql -
卸载已安装的mysql
# --nodeps 跳过依赖检查 rpm -ev --nodeps mysql80-community-release-el7-7.noarch rpm -ev --nodeps mysql-community-client-plugins-8.0.22-1.ky3.kb1.x86_64 -
删除mysql相关文件
# 删除库文件 find / -name "mysql*" | xargs rm -rf # 删除配置文件 find / -name "my.cnf*" | xargs rm -rf -
下载rpm包:
-
方法一:官网直接下载(https://downloads.mysql.com/archives/community/)
# 注:版本需对应,如下述包都是8.0.32 mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm mysql-community-common-8.0.32-1.el7.x86_64.rpm mysql-community-libs-8.0.32-1.el7.x86_64.rpm mysql-community-client-8.0.32-1.el7.x86_64.rpm mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm mysql-community-server-8.0.32-1.el7.x86_64.rpm -
方法二:建立本地仓库
以mariadb为例,推荐仓库自带的mariadb5
mkdir rpms cd rpms yum install --downloadonly --downloaddir=. mariadb-server
-
-
安装
将下载好的rpm包拷至服务器,可按“4.方法一”顺序安装,或
rpm -iUvh --force --nodeps *.rpm
二、管理MySQL服务
-
启动mysql服务
systemctl start mysqld -
检查mysql服务运行状态
systemctl status mysqld -
停止mysql服务
systemctl stop mysqld -
重启mysql服务
systemctl restart mysqld -
关闭开机自启动
systemctl disable mysqld -
开启开机自启动
systemctl enable mysqld
三、修改root初始密码
方法1
-
获取初始密码
grep 'temporary password' /var/log/mysqld.log -
登录mysql
# -h ip地址 mysql -u root -p输入上述命令获取的密码
-
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWD';
方法2
- 登录mysql
mysql -uroot - 选择mysql数据库
use mysql; - 修改密码
UPDATE mysql.user SET password = PASSWORD('newpassward') WHERE user = 'root'; # 或 SET password=PASSWORD('newpassward'); - 刷新权限
FLUSH PRIVILEGES;
方法3
- 使用客户端mysqladmin
mysqladmin -u root password 'newpassword' # 如果已经设置过密码 mysqladmin -u root -p 'oldpassword' password 'newpassword'
四、设置弱密码
-
查看mysql密码策略
SHOW VARIABLES LIKE 'validate_password%'; -
设置密码安全等级为LOW
set global validate_password.policy=LOW; -
设置密码长度为6
set global validate_password.length=6; -
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
五、添加新用户
方法1
Create语句
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
其中:
- username:用户名;
- password:用户登录密码;
- host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;
方法2
在 mysql 数据库中的 user 表插入记录
INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('%', 'username',
PASSWORD('password'), 'Y', 'Y', 'Y');
六、授权
赋予对表记录的增删改查、建表、删表权限
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON *.*
TO 'username'@'%'
IDENTIFIED BY 'password';
赋予全部权限
GRANT ALL PRIVILEGES
ON *.*
TO 'username'@'%'
IDENTIFIED BY 'password';
刷新权限
FLUSH PRIVILEGES;
七、 设置字符集
查看字符集
-
查看数据库字符集
show variables like '%character%'; -
查看MYSQL所支持的字符集
show charset;
修改字符集
解决乱码问题
-
修改库的字符集
# 建库时指定字符集 create database db_name default character set=utf8; # 修改库的字符集 alter database shiyan default character set gbk; -
修改表的字符集
# 建表时指定字符集 create table tbl_name(id int(4), name varchar(128)) default character set = 'gbk'; # 修改表的字符集 alter table test1 convert to character set utf8; -
修改字段的字符集
alter table tbl_name modify name char(10) character set gbk;
详见:
MySQL查看和修改字符集的方法 - 明王不动心 - 博客园 (cnblogs.com)
八、设置大小写不敏感
解决找不到表问题
-
查看变量
show variables like '%case%'; -
使用root用户修改/etc/mysql/my.cnf,mariadb为/etc/mysql/my.cnf.d/server.cnf
# 在[mysql]下增加 lower_case_table_name=1
九、设置mysql允许远程登录
-
改表法
use mysql; select host, user from user; update user set host = '%' where user = 'root'; -
授权法(未验证)
use mysql; select User,authentication_string,Host from user; GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES; -
重启服务生效
systemctl restart mysqld.service
十、开启关闭服务器防火墙
-
查看服务器防火墙是否开启
# 如果显示running,则为开启状态 firewall-cmd --state -
关闭防火墙
systemctl stop firewalld.service -
开启防火墙
systemctl start firewalld.service -
关闭开机自启动
systemctl disable firewalld.service -
开启开机自启动
systemctl enable firewalld.service -
打开端口
# 以端口5432为例 firewall-cmd --zone=public --add-port=5432/tcp --permanent -
查看端口占用
# 以端口8088为例 sudo lsof -i:8088

浙公网安备 33010602011771号