使用systemctl启动多个MySQL实例

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 有时我们会在一台服务器上配置多个MySQL实例,在centos 7 以上的版本,MySQL的启停通常是用systemctl管理的,如果多个实例,是不是需要编辑多个mysql.service文件,多个MySQL配置文件?答案是不需要,MySQL 支持一个systemctl服务管理多个MySQL实例。本文通过在一个服务器上配置3个MySQL实例使用systemctl来演示说明一下这个过程。


1 下载安装MySQL

从MySQL官网下载MySQL最新的稳定版二进制安装包,这里下载的8.0.32的最小二进制包,大小才58M,下载之后解压到指定位置,tar命令的-C参数可以指定文件的解压位置,根据linux的使用习惯,将文件解压至/usr/local目录下

[root@localhost] tar -xvf mysql-8.0.32-linux-glibc2.17-x86_64-minimal.tar.xz -C /usr/local

解压后MySQL安装目录是mysql-8.0.32-linux-glibc2.17-x86_64-minimal,这个目录太长了,引用起来太麻烦,给它创建一个软链接。

[root@localhost] ln -s /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal /usr/local/mysql

创建软链接之后,就可以使用/usr/local/mysql来引用MySQL的安装目录了,这个做还有一个好处是,如果需要切换或者更改MySQL的版本,只需要删除这个软链接,重新建一个至新版本的软链接。

2 创建MySQL数据库

2.1 创建MySQL用户及组

尽管可以使用root用户来启动MySQL数据库,基于安全方面的考虑,官网还是推荐为MySQL数据库创建一个单独的用户,根据一般的命名习惯,这个用户一般是mysql,多个数据库可以使用同一个用户。

[root@localhost]# groupadd mysql[root@localhost]# useradd -g mysql -s /bin/false mysql

2.2 创建数据目录

在/data目录下创建三个数据库的数据目录,每个数据库使用自己单独的数据目录,更改目录属主及权限

[root@localhost]# chown mysql:mysql /data/data1[root@localhost]# chown mysql:mysql /data/data2[root@localhost]# chown mysql:mysql /data/data3[root@localhost]# chmod 750 /data/data1[root@localhost]# chmod 750 /data/data2[root@localhost]# chmod 750 /data/data3

2.3 初始化数据目录

为了简单起见,这里使用非安全化的初始化,root用户的初始化密码为空

[root@localhost]bin/mysqld --initialize-insecure --user=mysql \   --basedir=/usr/local/mysql \   --datadir=/data/data3 [root@localhost]bin/mysqld --initialize-insecure --user=mysql \     --basedir=/usr/local/mysql \     --datadir=/data/data2 [root@localhost]bin/mysqld --initialize-insecure --user=mysql \       --basedir=/usr/local/mysql \       --datadir=/data/data3

3 配置多个实例使用systemctl启动

3.1 准备MySQL配置文件

编辑/etc/my.cnf文件,将原来的内容清除,加入以下内容

 [root@localhost]# cat my.cnf      [mysqld@master]       socket     = /tmp/mysql.sock1       port       = 3306       pid-file   = /data/data1/hostname.pid       basedir    = /usr/local/mysql/       datadir    = /data/data1       user       = mysql       server_id  = 1            [mysqld@slave1]       socket     = /tmp/mysql.sock2       port       = 3307       pid-file   = /data/data2/hostname.pid       basedir    = /usr/local/mysql/       datadir    = /data/data2       user       = mysql       server_id  = 2       [mysqld@slave2]       socket     = /tmp/mysql.sock3       port       = 3308       pid-file   = /data/data3/hostname.pid       basedir    = /usr/local/mysql/       datadir    = /data/data3       user       = mysql       server_id  = 3

上面的文件定义了三个MySQL实例,@是限定符,systemctl只支持这一个限定符,因此这里没有别的选择。[mysqld@master]定义了master实例自己的参数,因为这三个实例在一台服务器上启动,必须指定不同的sock,pid(目录不同),端口。这三个数据库配置中相同的部分可以写在[mysqld]下。

3.2 准备MySQL服务文件

进入/usr/lib/systemd/system目录下,创建mysqld@.service文件,在多个实例的情况下,MySQL服务文件名字不能是mysqld.service,必须是mysqld@.service。

[root@localhost] cd /usr/lib/systemd/system [root@localhost] touch mysqld@.service [root@localhost] chmod 644 mysqld@.service

创建文件后,在文件中加入以下内容

 [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           # Have mysqld write its state to the systemd notify socket           Type=notify           # Disable service start and stop timeout logic of systemd for mysqld service.           TimeoutSec=0           # Start main service           ExecStart=/usr/local/mysql/bin/mysqld --defaults-group-suffix=@%I  --defaults-file=/etc/my1.cnf $MYSQLD_OPTS           # Use this to switch malloc implementation           EnvironmentFile=-/etc/sysconfig/mysql           # Sets open_files_limit           LimitNOFILE = 10000           Restart=on-failure           RestartPreventExitStatus=1           # Set environment variable MYSQLD_PARENT_PID. This is required for restart.           Environment=MYSQLD_PARENT_PID=1           PrivateTmp=false

这个文件中的绝大部分内容和官网上的示例文件相同,只有# Start main service下的ExecStart例外,mysqld的启动选项里多了一个–defaults-group-suffix选项,这里指定的sysemd组后缀,限定符必须是@,后缀最后的部分可以是%I,也可以是%i。使用这个选项之后,mysqld进程在启动MySQL时,会按照[server], [mysqld],[mysql@I]的顺序读取配置文件的内容。编辑好MySQL的服务器文件后,需要重载systemctl后台进程,使服务生效。

[root@localhost] systemctl daemon-reload

3.3 启动MySQL示例,检查mysqld进程状态

使用systemctl启动MySQL,命令如下:

[root@localhost]systemctl start mysqld@master
systemctl start mysqld@slave1
systemctl start mysqld@slave2


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
92 1
|
1月前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
46 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
8天前
|
关系型数据库 MySQL 数据库
【赵渝强老师】启动与关闭MySQL数据库实例
MySQL数据库安装完成后,可以通过命令脚本启动、查看状态、配置开机自启、查看自启列表及关闭数据库。本文提供了详细的操作步骤和示例代码,并附有视频讲解。
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据类型详解及实例应用
MySQL数据类型详解及实例应用
|
1月前
|
存储 关系型数据库 MySQL
mysql 8.0 的 建表 和八种 建表引擎实例
mysql 8.0 的 建表 和八种 建表引擎实例
20 0
|
1月前
|
存储 关系型数据库 MySQL
Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)
本文介绍了如何使用MySQL8.0数据库中的Key_Value形式存储全国统计用区划代码和城乡划分代码(5级),包括导入数据、通过数学函数提取省市区信息,以及查询5级行政区划的详细数据。
30 0
|
1月前
|
算法 关系型数据库 MySQL
复购率 mysql 实例(sample database classicmodels _No.1 )
复购率 mysql 实例(sample database classicmodels _No.1 )
27 0
|
6月前
|
Prometheus 监控 Cloud Native
使用mysqld_exporter监控所有MySQL实例
使用mysqld_exporter监控所有MySQL实例
262 2
|
2月前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
178 0