MySQL快速安装和初始化笔记

2022-09-07 10:16:11 浏览数 (1)

Linux系统下快速安装MySQL,使用单机多实例的方式初始化实例,并启动实例。以及一些常用的配置等信息。

前言

这个部署流程较为简单,只是为了尽快启动个MySQL用作测试。比如用于开发或跑个测试什么的。 如果是用于线上生产,建议再做优化,特别是配置文件这里。

部署MySQL

安装

CentOS7需要安装yum源

CentOS7中MySQL数据库已从默认的程序列表中移除,替换成了MariaDB。所以需要去下载yum源。官方yum源链接

便捷安装命令
代码语言:javascript复制
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

如果是fedora则不需要

安装MySQL
代码语言:javascript复制
yum install community-mysql-server

配置MySQL的账号

MySQL不建议在root账号下运行,所以需要创建一个低权限的账号。

代码语言:javascript复制
groupadd mysql
useradd -g mysql mysql

帮助手册

代码语言:javascript复制
mysqld --verbose --help

初始化实例

如果直接通过systemd或者直接运行MySQL启动MySQL,那么数据库会被初始化到/var/。但默认的方式会让日志数据分的比较远。 单机多实例管理,通常会把日志数据放到一个指定的目录里,那需要将MySQL相关的参数做自定义。 通常会把写在配置文件里,从/etc/my.cnf复制出来修改。

准备操作

选择/data/my3306作为实例目录。

实例目录: /data/my3306 数据目录/data/my3306/data,用于保存数据。 日志目录/data/my3306/log,用于保存alert日志。 运行时文件/data/my3306/run,用于保存sock,pid等临时文件。 配置文件: /data/my3306/my.cnf

快速执行脚本
代码语言:javascript复制
mkdir -p /data/my3306
mkdir -p /data/my3306/data
mkdir -p /data/my3306/log
mkdir -p /data/my3306/run
chown -R mysql:mysql /data/my3306
配置文件

这是对应的配置文件,将其保存到 /data/my3306/my.cnf即可。

代码语言:javascript复制
# 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
user=mysql
datadir=/data/my3306/data/
socket=/data/my3306/run/mysql.sock

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

log-error=/data/my3306/log/mysqld.log
pid-file=/data/my3306/run/mysqld.pid

执行初始化

5.7后mysqld承担初始化动作,另外默认账号root的密码会被初始化写到日志里,要想偷懒的话用--initialize-insecure,这样密码默认为空。

不安全的初始化
代码语言:javascript复制
mysqld  --defaults-file=/data/my3306/my.cnf --initialize-insecure
## 注意返回值,避免没初始化完成。
echo $?
标准初始化
代码语言:javascript复制
mysqld  --defaults-file=/data/my3306/my.cnf --initialize

启动

配置文件已经写好了对应的地址,所以只要指向配置即可启动。

代码语言:javascript复制
nohup mysqld --defaults-file=/data/my3306/my.cnf &

授权

登录

本地通过127.0.0.1免密登录。

代码语言:javascript复制
 mysql -h127.0.0.1 --user=root
创建测试账号

创建一个无需密码的账号,并授予最高权限。

代码语言:javascript复制
create user 'test'@'%' identified by '';
GRANT ALL ON *.* TO 'test'@'%'; # *.*

常见问题处理

未初始化完成导致启动失败
代码语言:javascript复制
Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

注意data文件夹,肯定没有mysql的文件夹。这说明初始化存在异常,没有初始化完成。所以需要注意初始化动作的返回值是否为0.

没有文件权限导致的启动时报错
代码语言:javascript复制
[ERROR] InnoDB: Plugin initialization aborted with error Generic error

这种情况通常是data目录的权限问题。

代码语言:javascript复制
chown -R mysql:mysql data

0 人点赞