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
即可。
# 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