CentOS 安装 MySQL

MySQL 安装

通过 Yum Repository 方式安装

注意点:CentOS7 默认安装了 mariadb 数据库,先移除:yum remove mariadb-libs

添加 MySQL Yum源

简要概况,它是通过安装 mysql80-community-release-el7-2.noarch.rpm 包来实现配置 Yum 源的,这个 rpm 包并非 MySQL 的真正安装包。

你可以通过下载两个途径下载这个 mysql80-community-release-el7-2.noarch.rpm 包:

  1. wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm下载下来;
  2. MySQL Yum Repository page 手动下载,再上传到服务器上;

下载下来之后,执行:

yum localinstall mysql80-community-release-el7-2.noarch.rpm

可以通过以下命令检查MySQL Yum源是否已成功添加:

yum repolist enabled | grep "mysql.*-community.*"

上面步骤执行完之后,会在 /etc/yum.repos.d/ 目录下生成 MySQL 相关的 Yum 源配置,需要对这个配置文件进行一些设置,启用你想安装的版本对应的源。

选择一个 MySQL 发行版

1.查看一下 Yum 源的配置,可以看到那些源是 enabledisable

yum repolist all | grep mysql

2.选择你需要安装的版本对应的源

yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

由于生产环境大部分还是采用 MySQL5.7 版本,因此,我这里启用了5.7版本的源。除了上述方式,你还可以采用编辑/etc/yum.repos.d/mysql-community.repo文件,enable相应的源(enbaled=1 表示启动)。

3.验证源配置启动成功

yum repolist enabled | grep mysql
yum list|grep mysql-community-server

安装 MySQL

yum install mysql-community-server
yum install mysql-community-server-5.7.25-1.el7 # 建议指定具体的版本,保证一致性

这将安装 MySQL Server( MySQL -community-server )的包,以及运行服务器所需组件的包,包括客户机(MySQL -community-client)的包、客户机和服务器的通用错误消息和字符集(MySQL -community-common)以及共享的客户机库(MySQL -community-libs)的包。

MySQL 配置

MySQL 默认的配置文件在 /etc/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

修改默认的数据保存目录以及数据库编码

数据库保存的数据和日志是相当宝贵的,数据保存位置默认是这里:datadir=/var/lib/mysql,现在,我们需要改变默认的存储位置。

1.创建相关目录

mkdir -p /data/mysql/data
mkdir -p /data/mysql/log

2.修改属组

cd /data
chown -R mysql:mysql mysql

3.移动数据
这个步骤是针对已经有数据生成时的情况,如果是刚刚安装 MySQL 数据库,那么这一步可以跳过。

注意:为了确保数据的完整性,先 systemctl stop mysqld 停止 MySQL,然后再保存数据。

  • 暂停服务:systemctl stop mysqld
  • 备份数据: cp -R /var/lib/mysql /var/lib/mysql_bak
  • 移动数据:rsync -av /var/lib/mysql/ /data/mysql/data/,这个会将原 mysql 下的所有数据,保存到 /data/mysql/data 文件夹下,

使用-a标志保留的权限和其他目录属性,而-v提供详细输出,以便能够按照进度。

修改配置文件

vi /etc/my.cnf 编辑配置文件,数据位置和套接字都指向新的目录:

# 修改位置
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock

# 新增配置
[client]
socket=/data/mysql/mysql.sock

配置预览:

[mysqld]
datadir=/data/mysql/data
socket=/data/mysql/mysql.sock

#普通项目的编码方式可以设置成 utf8
#这里设置成utf8mb4,是因为我的项目需要存储 emoji 表情,
#这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。
#在MySQL 5.6 以上版本中,可以设置编码为utf8mb4,这个字符集是utf8的超集。
#注意KEY不要写错,网上很多文章都是写default-character-set是错的
character-set-server=utf8mb4 

#版本5.6.19以后必须设置这一句才能使[client]中设置的编码有效
character-set-client-handshake = FALSE
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

#表名是否区分大小写:1表示不区分大小写,2表示区分
lower_case_table_names=1

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/data/mysql/log/mysqld.log
#skip-grant-tables # 如果去除注释,可以实现免密登录,不建议开启免密

[mysql] 
default-character-set=utf8mb4

[client]
socket=/data/mysql/mysql.sock

#普通项目的编码方式可以设置成 utf8
#这里设置成utf8mb4,是因为我的项目需要存储 emoji 表情,
#这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。
#在MySQL 5.6 以上版本中,可以设置编码为utf8mb4,这个字符集是utf8的超集。
default-character-set=utf8mb4

以上配置之外,还进行了编码的配置,支持 UTF-8

启动 systemctl start mysqld,这样子,之前的账户密码等数据才会保留!!!

4.验证
启动 MySQL

systemctl start mysqld # 启动
systemctl status mysqld # 状态查询
systemctl enable mysqld # 开机自启
systemctl daemon-reload # 重载所有修改过的配置文件

默认初始密码:

grep 'temporary password' /var/log/mysqld.log # 未未修改日志路径
grep 'temporary password' /data/mysql/log/mysqld.log # 修改日志路径

验证:

mysql -u root -p
select @@datadir; # 执行这个命令,需要先用 ALTER USER 初始化命令
SHOW VARIABLES LIKE 'character%'; # 查看编码,character_set_system 一直都会是 utf8,不能被更改

修改 root 密码

注意:MySQL 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于 8 位

设置管理员密码,以下几种方式都一样:

SET PASSWORD = PASSWORD("Root_123456");
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_123456'; 
set password for 'root'@'localhost'=password('Root_123456');

以后可以通过如下命令修改:

use mysql;
update user set password=PASSWORD('MyNewPass5!') where user='root';

还需要刷新使其密码生效:

alter user 'root'@'localhost' password expire never;
flush privileges;

如果你是安装的8.0版本,则需要这么改:

ALTER USER 'root'@'localhost' identified by 'Root_123456';

新建用户

create user 'cicd'@'%' identified by 'Root_123456'; # 因为要可以从任何 ip 登录,所以 host 设置的是%号

赋予权限:

grant all privileges on *.* to 'cicd'@'%' with grant option; # MySQL 8.0 语法 *.* 表示任何数据库的任何表
grant all privileges on *.* to 'cicd'@'%' identified by '123456' with grant option; # MySQL 5.7 语法
flush privileges;  # 这时候登录时,就可以看到所有数据库了

grant  select,insert on *.* to 'imooc'@'%' with grant option; # 只赋予部分权限
revoke all privileges on *.* from imooc; # 收回所有权限

远程连接 MySQL

需要关闭防火墙:

systemctl stop firewalld # 关闭防火墙

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须添加一个允许远程连接的帐户。或者修改 root 为允许远程连接(不推荐)。

mysql -u root -p 进入mysql 终端:

use mysql;
select * from user G; # G 格式化显示 host 和 user 两个字段
select Host,User from user G; # Host表示允许哪些主机访问
update user set Host='%' where Host='localhost' and User='root';
flush privileges; # 刷新权限 或者 systemctl restart mysqld

MySQL 常用命令

show databases;
use tables;
show variables like 'character%'; # 查询编码

MySQL 命令补全行工具

pip install -U mycli
mycli -u root [-h localhost]

mycli local_database
mycli -h localhost -u root app_db
mycli mysql://amjith@localhost:3306/django_poll

FAQ

如何查看 MySQL 版本?

mysql -V

忘记 Root 密码?

sudo vim /etc/my.cnf # 打开配置文件,最后增加下面一行,实现MySQL免密登录
skip-grant-tables # 跳出授权表的验证
systemctl restart mysqld
use mysql;
show tables;
update user set authentication_string = password('root_123456') where user = 'root'; # 旧方法
flush privileges;
alter user 'root'@'%' identified by 'Root_1234'; # 将 skip-grant-tables 去掉

参考

安装

配置

修改目录

原文地址:https://www.cnblogs.com/michael-xiang/p/10467414.html