Yum Install MySQL
一、安装 MySQL 的 yum 源
https://dev.mysql.com/downloads/repo/yum
# 安装源,会在 /etc/yum.repos.d/ 下生成 mysql-community.repo 和 mysql-community-source.repo 文件 sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm # 查看 yum 源中是否有 mysql 安装包 sudo yum repolist all | grep mysql
二、选择 MySQL 的版本并安装
# 安装管理工具 yum install -y yum-utils # 禁用 mysql 8.0 yum-config-manager --disable mysql80-community # 启用 mysql 5.7 yum-config-manager --enable mysql57-community # 安装 yum install -y mysql-community-server
三、相关设置与启动
启动服务
# 开启服务 systemctl start mysqld.service # 开机自启动 systemctl enable mysqld.service # 检查 MySQL 服务器的状态 systemctl status mysqld.service # 查看端口 netstat -ln | grep 3306 # 从日志文件中获取 root 账户初始密码 grep "password" /var/log/mysqld.log
初始化服务
# 直接用该密码登陆会要求改密码,最好先进行向导操作 # 安全向导 mysql_secure_installation # 输入 root 初始密码,初始密码中有特殊字符时需转义 Enter password for user root: # 设置新密码,密码太简单会提示错误:Your password does not satisfy the current policy requirements New password # 是否确认修改 root 密码 Change the password for root # 是否删除匿名用户 Remove anonymous users # 是否禁止 root 远程登录 Disallow root login remotely # 是否删除 test 数据库 Remove test database and access to it # 是否现在刷新权限 Reload privilege tables now
设置简单密码
官方 在新版本中对密码设置要求比较严格
-- 查看密码策略 SHOW VARIABLES LIKE 'validate_password%'; -- 修改密码策略,修改密码检查强度和密码长度就可以 -- 8.0 之前 set global validate_password_policy=0; set global validate_password_length=4; -- 8.0 之后 set global validate_password.policy=0; set global validate_password.length=4; -- 修改当前用户密码 ALTER USER USER() IDENTIFIED BY '123456'; -- 修改指定用户密码 ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
忘记 root 密码情况下设置密码
# 编辑配置文件 vim /etc/my.cnf # 文件最后添加免密登陆,MySQL 8 不可以 skip-grant-tables # 重启 mysql 服务 systemctl restart mysqld.service # 登陆 mysql,不用密码 mysql -uroot
清空密码
-- 清空指定账户密码 use mysql; update user set authentication_string = '' where user = 'root'; -- 退出 mysql,删除免密登陆配置,重启 mysql 服务,用空密码登陆,然后进行修改密码操作
添加远程访问权限
首先开放本机 3306 端口或关闭防火墙
# iptables # 开放端口 iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT # 保存配置 service iptables save # firewalld # 开放端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重启 firewall firewall-cmd --reload # 查看已开放端口 firewall-cmd --list-ports # 关闭防火墙 systemctl stop firewalld.service # 关闭开机自启 systemctl disable firewalld.service
为已有用户添加远程访问权限
-- 选择 mysql 数据库 use mysql; -- 修改指定用户登录位置,%为任意地址,可配置指定IP update user set host = '%' where user = 'root'; -- 修改登陆密码和加密规则,8 版本默认的认证插件为 Caching_sha2_password,原来是 mysql_native_password,不修改 Navicat 等工具连接会认证失败 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; -- 刷新权限 flush privileges;
创建新用户并添加远程访问权限
-- 创建用户(user1为用户名,%为登陆地址任意ip,也可指定,123456为登录密码) CREATE USER 'user1'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; -- 默认创建的用户是无权限,只能登录而已,(all:所有权限,有select,update等等权限,后面的*.*:指定数据库.指定表,这里指所有,to后面是用户) grant all on *.* to 'user1'@'%'; -- 刷新权限 flush privileges;
查看登陆权限
use mysql; select host,user from user;
四、配置(/etc/my.cnf)
Linux 上修改 /etc/my.cnf。windows 上 my.ini,一般会在安装目录的根目录。
Linux 用 rpm 包安装的 MySQL 没有 /etc/my.cnf 文件,默认用 /usr/share/mysql/my-medium.cnf,复制 /usr/share/mysql 目录下的 .cnf 文件到 /etc 目录,并改名为 my.cnf 即可。
注:linux 上修改 datadir 路径到其它磁盘后可能会出现服务启动失败的情况,这时关闭 selinux 即可。
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] # 编码,https://juejin.cn/post/6930390275575513101 character-set-server = utf8mb4 # 排序规则 collation-server = utf8mb4_unicode_ci # 关闭密码验证,可设置简单密码 validate_password = off # 存储引擎 default-storage-engine = INNODB # 免密登陆,8.0 不可用 skip-grant-tables # 如果要设置属性为大小写不敏感,要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将找不到数据库名 lower_case_table_names = 0 # 时区 default-time_zone = '+8:00'
五、常用命令
-- 查看版本 select version(); -- 查看日志文件位置 select @@log_error; -- 查看数据文件位置 select @@datadir;
存储引擎
-- 查看储存引擎,Support列,YES表示支持,DEFAULT表示默认,NO表示不支持 show engines; show variables like '%storage_engine%'; -- 设置储存引擎 SET default_storage_engine = InnoDB;
查看编码,修改编码(已创建的表或库)
-- 查看编码 SHOW VARIABLES LIKE '%character%'; -- 查看排序规则 SHOW VARIABLES LIKE 'collation%'; -- 设置编码 SET NAMES utf8; -- 修改已创建数据库的字符集 alter database mydb character set 'utf8mb4'; -- 修改已创建数据表的字符集 alter table mytbl convert to character set 'utf8mb4'; -- 已经乱码数据,无论是修改 mysql 配置文件或是修改库、表字符集,都无法改变已经变成乱码的数据。 -- 只能删除数据重新插入或更新数据才可以完全解决
大小写不敏感,Windows 系统默认大小写不敏感,但 Linux 系统是大小写敏感的
-- 查看 show variables like '%lower_case_table_names%' -- 0 大小写敏感 -- 1 大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于 sql 语句都是转换为小写对表和 DB 进行查找 -- 2 创建的表和 DB 依据语句上格式存放,凡是查找都是转换为小写进行
修改时区
-- 查看时间 SELECT NOW(); -- 查看时区 SHOW VARIABLES LIKE '%time_zone%'; -- 临时修改,重启 MySQL 服务后失效 SET GLOBAL time_zone='+8:00'; flush privileges;
https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en
https://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html & https://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
中文 5.1:https://dev.mysql.com/doc/index-archive.html & https://jhxxb.gitee.io/blog/refman-5.1-zh.html-chapter/index.html
https://mysqltutorial.org & http://ourmysql.com & https://imysql.com