CentOS7下安装MySQL5.7和MySQL8

711 阅读7分钟

前言

Linux上安装软件常见的几种方式:

  • 源码编译
  • 压缩包解压(一般为tar.gz)
  • 编译好的安装包(RPM、DPKG等)
  • 在线安装(YUM、APT等)

本人结合MySQL官网,结合官方提供的下载链接,为了更方便进行各个版本的下载安装,采用rpm的方式进行下载安装

官网下载

MySQL官网地址:www.mysql.com/

下载完成之后,就可以开始安装啦。

MYSQL5.7安装步骤

1.删除已安装的MySQL

检查mysql

rpm -qa | grep mysql

如果存在则删除

rpm -e xxx --nodeps

检查MariaDB

shell> rpm -qa | grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64

删除MariaDB

shell> rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps

2.安装MySQL

解压

shell> tar xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar 
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm

我们主要安装的是这四个(如果有需要也可以一并安装其它的):

mysql-community-libs-5.7.26-1.el7.x86_64.rpm
mysql-community-common-5.7.26-1.el7.x86_64.rpm
mysql-community-client-5.7.26-1.el7.x86_64.rpm
mysql-community-server-5.7.26-1.el7.x86_64.rpm

安装

rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

3.启动配置Mysql

启动mysql服务

systemctl start mysqld

4.修改默认密码

在mysql服务启动的时候,会自动创建一个root@localhost用户,默认密码会在/var/log/mysqld.log文件中生成

查看默认密码

grep 'temporary password' /var/log/mysqld.log

登陆mysql

mysql -uroot -pxxxx

修改密码

mysql> alter user 'root'@'localhost' identified by '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

提示修改的密码过于简单,解决办法为:

  1. 设置复杂密码,包含字母、数字等
  2. 修改mysql配置,修改配置文件/etc/my.cnf,添加validate_password=OFF,保存并重启MySQL

5.设置编码集为UTF8

查询编码集

mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

修改为UTF8

编辑/etc/my.cnf文件,在[mysqld]下添加如下,并重启mysql服务

[mysqld]
character_set_server=utf8
init-connect='SET NAMES utf8'

6.设置可以远程登录访问

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> flush privileges;

7.设置开机自启

systemctl enable mysqld
systemctl daemon-reload

8.创建普通用户,并赋予root同等权限

create user 'username'@'%' identified by 'passwod';
grant all privileges on *.* to 'username'@'%' with grant option;

9.更改mysql的物理库位置

mysql物理库默认在/var/lib/mysql,由于数据库的增大,该目录磁盘可能不能满足,这时候我们就需要更改mysql的物理位置

关闭mysql服务

systemctl stop mysqld

新建物理库位置

mkdir -p /home/mysql_data/
# mysql启动会以mysql用户权限进行操作,root权限可能导致mysql无法启动
chown mysql:mysql /home/mysql_data/

从旧的物理库转移数据

# -a 一定需要添加,会连同权限一起添加上
cp -a /var/lib/mysql /home/mysql_data/

修改my.cnf配置文件

#修改前先备份,防止出错,便于还原
cp /etc/my.cnf /etc/my.cnf.bk
vim /etc/my.cnf
#datadir=/var/lib/mysql
#修改如下
datadir=/home/mysql_data/mysql
#socket=/var/lib/mysql/mysql.sock
#修改如下
socket=/home/mysql_data/mysql/mysql.sock

# 新增如下客户端的内容,否则执行mysql -uroot -p密码会报错如下
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
[client] 
default-character-set=utf8
# 与server端的mysql.sock目录一致
socket=/home/mysql_data/mysql/mysql.sock

修改mysqld配置文件

cp /etc/init.d/mysqld /etc/init.d/mysqld.bk
vim /etc/init.d/mysqld
# 如果没有则不需要修改
datadir=/var/lib/mysql
#修改如下
datadir=/home/mysql_data/mysql

重启mysql服务

systemctl start mysqld
# 如果启动失败,临时关闭setenforce防火墙,在重新启动
setenforce 0

10.mysql的卸载

本文使用rpm安装mysql,所以重点介绍rpm版的mysql卸载方式

删除mysql依赖

# 停止mysql服务
systemctl stop mysqld
# 查询mysql相关依赖
rpm -qa | grep -i mysql 
# 进行删除
rpm -e mysql-community-server-5.7.28-1.el7.x86_64
rpm -e mysql-community-client-5.7.28-1.el7.x86_64
rpm -e mysql-community-libs-5.7.28-1.el7.x86_64
rpm -e mysql-community-common-5.7.28-1.el7.x86_64

删除配置文件

rm -rf /var/lib/mysql  
rm /etc/my.cnf  
rm -rf /root/.mysql_history

#查找mysql文件,setenforce防火墙下也有mysql,注意删除错文件
whereis mysql

find / -name mysql
# 进行删除

删除自启服务

chkconfig --list | grep -i mysql  
chkconfig --del mysqld

11.mysql主从复制的实现

  • 主机:192.168.126.20
  • 从机:192.168.126.30

主机配置文件的修改

vim /etc/my.cfg

#mysql主从配置,主机配置
server-id=1
#通过log-bin文件进行复制,创建/var/log/mysql文件夹,然后修改为mysql用户组权限
log-bin=/var/log/mysql/mysql-bin.log
#想要复制的数据库
binlog-do-db=my_demo
#如果想复制多个数据库A,B,C
则不能binlog_do_db=A,B,C
正确配置如下:
binlog_do_db=A
binlog_do_db=B
binlog_do_db=C

#屏蔽系统库同步
binlog‐ignore‐db=mysql
binlog‐ignore‐db=information_schema
binlog‐ignore‐db=performance_schema

重启mysql,进入mysql查询master配置

#新建用户配置主从复制
GRANT REPLICATION SLAVE  ON *.* TO 'username'@'从机地址' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE  ON *.* TO 'repl'@'192.168.126.30' IDENTIFIED BY '123456';
flush privileges;
show master status;

从机配置文件的修改

vim /etc/my.cfg

#mysql从机配置
server-id=2

进行mysql管理控制台

#从机配置
stop slave;
show slave status\G;
CHANGE MASTER TO MASTER_HOST='主机地址',MASTER_USER='主从配置用户名',MASTER_PASSWORD='主从配置用户密码',MASTER_LOG_FILE='log-bin日志文件file',MASTER_LOG_POS=logn-bin文件配置;
CHANGE MASTER TO MASTER_HOST='192.168.126.20',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=603;
#开启主从复制
start slave;

如下则表示成功:

12.mysql的优化

在预生产环境中,我们可能需要开启慢查询日志,开启至少一天,设置查询阈值,所有超过阈值的sql都将会被记录下来。然后在explain分析sql,优化sql语句,或者对mysql服务器进行配置层面的优化。

开启mysql的慢查询功能

平常这个功能是关闭的,在我们排查完问题后,建议关闭该功能,避免不必要的消耗

mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | OFF                               |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)
# 开启慢查询日志功能
set global slow_query_log = 1
# 查询慢查询sql的阈值,超过改值则为慢SQL
mysql> SHOW VARIABLES LIKE 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
# 设置慢查询阈值,需要重新打开会话,才可以看到long_query_time的变化
set global long_query_time=3;
# 查询当前系统中有多少条慢查询记录
show global status like '%slow_queries%';

修改mysql配置文件实现

在[mysqld]下配置
slow_query_log=1;
slow_query_log_file=/var/lib/mysql/my-slow.log
long_query_time=3;
log_output=FILE

MYSQL8.0安装步骤

mysql rpm(redhat package manage)安装

根据mysql5.7的安装截图从oracle官网下载mysql8.0的rpm安装包,并上传到服务器上

确认相关依赖,没有则需要下载

rpm -qa|grep libaio
rpm -qa|grep net-tools

解压

tar xvf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar

安装

rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm

可能存在的错误

image.png

一个命令:yum remove mysql-libs 解决,清除之前安装过的依赖即可

查看Mysql版本

执行如下命令,如果成功表示安装mysql成功。类似java -version如果打出版本等信息

mysql --version
#
mysqladmin --version

image.png

执行如下命令,查看是否安装成功。需要增加 -i 不用去区分大小写,否则搜索不到。

rpm -qa|grep -i mysql

服务的初始化

由于MYSQL的数据是存储在磁盘上的,所以我们的磁盘空间必须足够,默认的持久化地址为/var目录下,我们可以修改mysql的配置文件,修改持久化地址

创建相关目录,并将目录权限授予mysql用户

mkdir -p /opt/mysql/lib/mysql
mkdir -p /opt/mysql/log
mkdir -p /opt/mysql/run

chown -R mysql:mysql /opt/mysql

修改配置文件

vim /etc/my.cnf

datadir=/opt/mysql/lib/mysql
socket=/opt/mysql/lib/mysql/mysql.sock

log-error=/opt/mysql/log/mysqld.log
pid-file=/opt/mysql/run/mysqld/mysqld.pid

# 新增client内容,否则客户端mysql命令默认从/var/lib/mysql/mysql.sock读取mysql进程信息
[client]
socket=/opt/mysql/lib/mysql/mysql.sock

初始化mysql

为了保证数据库目录与文件的所有者为 mysql 登录用户,如果你是以 root 身份运行 mysql 服务,需要执 行下面的命令初始化:

mysqld --initialize --user=mysql

说明: --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期 ,登录后你需要设置一个新的密码。生成的 临时密码 会往日志中记录一份。

查看密码

cat /var/log/mysqld.log

启动mysql

systemctl start mysqld

其他

  • 查看mysql是否自启动 systemctl list-unit-files|grep mysqld.service
    systemctl enable mysqld.service
    systemctl disable mysqld.service

设置大小写不敏感

1、停止MySQL服务
2、删除数据目录,即删除 /var/lib/mysql(默认) 目录
3、在MySQL配置文件( /etc/my.cnf )中[mysqld]添加 lower_case_table_names=1
4、启动MySQL服务