Skip to content

一、软件包下载

bash
企业版:Enterprise,互联网行业一般不选择。

社区版本:
  源码包编译安装:source code .tar.gz
  通用二进制

公司用什么版本数据库?具体什么小版本号?
5.6.20 5.6.34 5.6.36 5.6.38 5.6.40
5.7.18 5.7.20 5.7.22 5.7.31
8.0.23 8.0.31 8.0.37

通用二进制版本:本文档采用此方式安装。

https://dev.mysql.com/downloads/mysql/

选择版本 8.0.37,再选择 Linux - Generic,再选择 Linux - Generic (glibc 2.12) (x86, 64-bit),再点击下边最大的一个包右侧的 Download 按钮。

二、卸载 MariaDB

在 CentOS 中默认安装有 MariaDB,是 MySQL 的一个分支,主要由开源社区维护。CentOS 7 及以上版本已经不再使用 MySQL 数据库,而是使用 MariaDB 数据库。如果直接安装 MySQL,会和 MariaDB 的文件冲突。因此,需要先卸载自带的 MariaDB,再安装 MySQL。

bash
# 查看是否存在 MariaDB
rpm -qa|grep mariadb

# 卸载 mariadb
yum remove mariadb*

三、MySQL 二进制安装

3.1 创建 mysql 工作目录

bash
[root@db01 ~]# mkdir -p /home/application/mysql

3.2 上传软件至 ~ 目录,并解压并改名为 app

bash
[root@db01 ~]# tar -xf mysql-8.0.37-linux-glibc2.12-x86_64.tar.xz
[root@db01 app]# mv mysql-8.0.37-linux-glibc2.12-x86_64 /home/application/mysql/app
[root@db01 app]# ls -l /home/application/mysql/app
总用量 308
drwxr-xr-x  2 7161 31415   4096  3月 28 05:39 bin
drwxr-xr-x  2 7161 31415   4096  3月 28 05:39 docs
drwxr-xr-x  3 7161 31415   4096  3月 28 05:39 include
drwxr-xr-x  6 7161 31415   4096  3月 28 05:39 lib
-rw-r--r--  1 7161 31415 282187  3月 28 03:22 LICENSE
drwxr-xr-x  4 7161 31415   4096  3月 28 05:39 man
-rw-r--r--  1 7161 31415    666  3月 28 03:22 README
drwxr-xr-x 28 7161 31415   4096  3月 28 05:39 share
drwxr-xr-x  2 7161 31415   4096  3月 28 05:39 support-files

3.3 修改环境变量

bash
[root@db01 app]# vim /etc/profile
# 加入一行
export PATH=$PATH:/home/application/mysql/app/bin

[root@db01 app]# source /etc/profile

3.4 建立 mysql 用户和组(如果有可忽略)

bash
useradd -s /sbin/nologin mysql -M

3.5 创建 mysql 数据目录、日志目录,并修改权限

bash
mkdir -p /home/application/mysql/data
mkdir -p /home/application/mysql/logs

chown -Rf mysql.mysql /home/application/mysql/app
chown -Rf mysql.mysql /home/application/mysql/data
chown -Rf mysql.mysql /home/application/mysql/logs

3.6 准备 my.cnf 配置文件

WARNING

如果不需要开启 binlog,需要在 [mysqld] 下面加上 skip_log_bin

bash
vim /etc/my.cnf
bash
[mysqld]
# MySQL服务运行的用户
user=mysql

# MySQL服务监听的端口
port=3306

# 最大连接数
max_connections=1000

# MySQL程序文件的安装目录
basedir=/home/application/mysql/app

# 数据文件存放的目录
datadir=/home/application/mysql/data

# 默认的存储引擎
default-storage-engine=INNODB

# 服务器默认字符集
character-set-server=utf8mb4

# 服务器默认的校对规则
collation_server = utf8mb4_general_ci

# 禁用域名解析,只允许IP地址进行客户端登录
skip-name-resolve=1

# 不区分大小写
lower_case_table_names=1

# 日志时间戳格式
log_timestamps=SYSTEM

# 设置默认的时区
default-time-zone = '+8:00'

# 是否开启慢查询日志
slow_query_log=ON
# 慢查询的阈值,超过这个时间的查询将被记录到慢查询日志
long_query_time=3
# 慢查询日志文件的存储路径
slow_query_log_file=/home/application/mysql/logs/slow_query.log
# 是否记录未使用索引的查询到慢查询日志中(当前设置为不记录)
log_queries_not_using_indexes = 0
# 管理员执行的慢查询语句是否记录到慢查询日志中
log_slow_admin_statements = 1
# 从服务器执行的慢查询语句是否记录到慢查询日志中
log_slow_replica_statements = ON
# 当未使用索引的查询数量达到设定值时,开始记录这些查询到慢查询日志中
log_throttle_queries_not_using_indexes = 10

# 是否开启通用日志记录(当前未开启)
#general_log=1
#general_log_file=/home/application/mysql/logs/mysql_general.log

# 错误日志文件的存储路径
log-error=/home/application/mysql/logs/mysql.log
log_error_verbosity = 3

# 数据缓冲区
# 专用服务器可以设为内存70%以上,建议innodb_buffer_pool_size设置为系统内存的50%,或更低
innodb_buffer_pool_size = 8G
innodb_log_buffer_size = 4M
table_open_cache = 16384
table_definition_cache = 16384

# 二进制日志(binlog)的配置
server_id=17
log-bin=mysql-bin
max_binlog_size = 100M
binlog_format=row
log_replica_updates
# 二进制日志的过期时间,单位为秒(7天)
binlog_expire_logs_seconds=604800

# 设置不要复制的数据库,可以设置多个
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=performance_schema

# 从库不进行同步的数据库
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=sys
replicate-ignore-db=performance_schema

# 禁用SSL
tls_version=''

# MySQL服务的Unix套接字文件
socket=/tmp/mysql.sock

# 启用的SQL模式
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

# 最大允许的数据包大小
max_allowed_packet=512M

[mysql]
# 客户端使用的Unix套接字文件
socket=/tmp/mysql.sock

# 客户端默认字符集
default-character-set = utf8mb4

[client]
# 客户端程序默认使用的字符集
default-character-set = utf8mb4

3.7 初始化数据

bash
# 初始化数据,初始化管理员的密码为空
# 如果已经初始化过了,就需要把数据目录清空,再次初始化
[root@db01 ~]# rm -rf /home/application/mysql/data/*
[root@db01 ~]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure
[root@openeuler mysql]# ls -l /home/application/mysql/data/

总用量 1091036
-rw-r----- 1 mysql mysql        56  6月 12 13:24  auto.cnf
-rw------- 1 mysql mysql      1705  6月 12 13:24  ca-key.pem
-rw-r--r-- 1 mysql mysql      1112  6月 12 13:24  ca.pem
-rw-r--r-- 1 mysql mysql      1112  6月 12 13:24  client-cert.pem
-rw------- 1 mysql mysql      1705  6月 12 13:24  client-key.pem
-rw-r----- 1 mysql mysql         6  6月 12 13:26  data_dir.pid
-rw-r----- 1 mysql mysql    196608  6月 12 13:54 '#ib_16384_0.dblwr'
-rw-r----- 1 mysql mysql   8585216  6月 12 13:24 '#ib_16384_1.dblwr'
-rw-r----- 1 mysql mysql      6238  6月 12 13:24  ib_buffer_pool
-rw-r----- 1 mysql mysql 524288000  6月 12 13:52  ibdata1
-rw-r----- 1 mysql mysql 524288000  6月 12 13:26  ibtmp1
drwxr-x--- 2 mysql mysql      4096  6月 12 13:26 '#innodb_redo'
drwxr-x--- 2 mysql mysql      4096  6月 12 13:26 '#innodb_temp'
drwxr-x--- 2 mysql mysql      4096  6月 12 13:24  mysql
-rw-r----- 1 mysql mysql       180  6月 12 13:24  mysql-bin.000001
-rw-r----- 1 mysql mysql      1513  6月 12 13:52  mysql-bin.000002
-rw-r----- 1 mysql mysql        38  6月 12 13:26  mysql-bin.index
-rw-r----- 1 mysql mysql  26214400  6月 12 13:52  mysql.ibd
drwxr-x--- 2 mysql mysql      4096  6月 12 13:24  performance_schema
-rw------- 1 mysql mysql      1705  6月 12 13:24  private_key.pem
-rw-r--r-- 1 mysql mysql       452  6月 12 13:24  public_key.pem
-rw-r--r-- 1 mysql mysql      1112  6月 12 13:24  server-cert.pem
-rw------- 1 mysql mysql      1705  6月 12 13:24  server-key.pem
drwxr-x--- 2 mysql mysql      4096  6月 12 13:24  sys
-rw-r----- 1 mysql mysql  16777216  6月 12 13:49  undo_001
-rw-r----- 1 mysql mysql  16777216  6月 12 13:54  undo_002

四、使用 systemd 管理 mysql

bash
vim /etc/systemd/system/mysqld.service
bash
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/home/application/mysql/app/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
bash
chmod +x /etc/systemd/system/mysqld.service

# reload 重新加载 systemd
systemctl daemon-reload

# systemd 管理相关命令
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld

五、创建 root 用户密码,并管理用户

bash
[root@db01 ~]# mysql -uroot -p
# 出现“Enter password:”时,直接按回车即可进入 mysql

# 设置 root 户密码
mysql> set password = '密码';
Query OK, 0 rows affected (0.00 sec)

# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

# 配置远程访问:
mysql> use mysql;
mysql> update user set user.host='%' where user.user='root';
mysql> flush privileges;

# 如果需要,可以再添加 srebro 用户
CREATE USER 'srebro'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'srebro'@'%';
FLUSH PRIVILEGES;

mysql> quit
Bye

六、可能遇到的问题

1. mysql 初始化时报错

mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

备注:这是由 Linux 系统缺少 libaio 库导致的,可将 libaiolibaio-devel 库(或其他适用版本)拉进系统,然后 rpm 安装:

bash
rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm
rpm -ivh libaio-devel-0.3.109-13.el7.x86_64.rpm

再次检索 libaio 库发现已存在,再初始化 mysql 即可成功。

2. mysql 初次用 root 户登陆时报错

mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

备注:这是由 mysql 加载共享库 libtinfo.so.5 失败导致的,可将共享库 libtinfo.so.5 添加软连接至 libtinfo.so.6.3

bash
# 找到 libtinfo.so.6.3
find /usr/ -name 'libtinfo*'
# 显示以下二行内容:
# /usr/lib64/libtinfo.so.6
# /usr/lib64/libtinfo.so.6.3

# 然后执行:
ln -s /usr/lib64/libtinfo.so.6.3 /usr/lib64/libtinfo.so.5
最近更新