暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL-在一台服务器上配置多个实例使用systemctl启动

suger 2023-05-09
1074


有时我们会在一台服务器上配置多个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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论