layout: post
title: Mysql的多实例部署
date: 2018-01-25
tags: [“Mariadb”,”软件服务”]


一、部署多实例

应工作需要,有时需要我们在一台服务其上启动多个mysql实例,实现方法有很多种,这里只介绍一种也是推荐使用的,因为相对于其他的方法,这种方法会比较灵活。

二、部署步骤

我们使用已经用源码安装好的mysql-server端来部署多实例,安装步骤可见Mariadb的多种安装方法

下图为我们要创建的多实例的目录树

db是用来保存数据库数据的目录,etc保存每个实例的配置文件,pid为保存实例运行时的pid文件和socket文件。

我们将会按照上图创建三个实例,以下为执行步骤:

1、创建目录

  1. mkdir -p /data/3300{6..8}/{db,etc,pid}

2、拷贝配置文件到第一个etc目录并修改,作为模板然后拷贝到其他的etc目录

1)对端口为33006的实例操作

  1. cd /app/mysq/support-files/
  2. cp my-innodb-heavy-4G.cnf /data/33006/etc/my.cnf
  3.  
  4. vim my.cnf
  5. mysqld下添加如下项目
  6. datadir = /data/33006/db
  7. innodb_file_per_table = on
  8. skip_name_resolve = on
  9.  
  10. 修改mysqld
  11. port = 33006
  12. socket = /data/33006/pid/mysql.sock
  13.  
  14. mysqld_safe标签下添加
  15. log-error=//data/33007/pid/mysql_33006.err.log
  16. pid-file= /data/33006/pid/mysql_33006.pid

2)对端口为33007的实例操作

  1. cp /data/33006/etc/my.cnf /data/33007/etc/my.cnf
  2.  
  3. vim my.cnf
  4. mysqld下修改如下项目
  5. datadir = /data/33007/db
  6. innodb_file_per_table = on
  7. skip_name_resolve = on
  8.  
  9. 修改mysqld
  10. port = 33007
  11. socket = /data/33007/pid/mysql.sock
  12.  
  13. mysqld_safe标签下添加
  14. log-error=//data/33007/pid/mysql_33007.err.log
  15. pid-file= /data/33007/pid/mysql_33007.pid

3)对端口为33008的实例操作

  1. cp /data/33006/etc/my.cnf /data/33008/etc/my.cnf
  2.  
  3. vim my.cnf
  4. mysqld下修改如下项目
  5. datadir = /data/33008/db
  6. innodb_file_per_table = on
  7. skip_name_resolve = on
  8.  
  9. 修改mysqld
  10. port = 33008
  11. socket = /data/33007/pid/mysql.sock
  12.  
  13. mysqld_safe标签下添加
  14. log-error=//data/33007/pid/mysql_33008.err.log
  15. pid-file= /data/33007/pid/mysql_33008.pid

注意:如果实在虚拟机中进行的操作,建议注视掉”innodb_additional_mem_pool_size”这一项,如果内存分配过少,这项会启动报错。

3、初始化各实例数据库

首先要确保权限的问题

  1. chown -R mysql.root /data/3300{6..8}

初始化

  1. cd /app/mysql
  2. scripts/mysql_install_db --datadir=/data/33006/db --basedir=/app/mysql --user=mysql
  3. scripts/mysql_install_db --datadir=/data/33007/db --basedir=/app/mysql --user=mysql
  4. scripts/mysql_install_db --datadir=/data/33008/db --basedir=/app/mysql --user=mysql

4、数据库初始化完成之后,启动数据库

启动数据库我们可以直接通过mysqld_safe命令直接启动每个实例,但是比较繁琐,所以还是借助其启动脚本来实现比较方便。

实现方法:

1)添加环境变量,让系统可以找到mysql的可执行命令

  1. echo 'PATH=/app/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
  2. . /etc/profile.d/mysql.sh

2) 复制启动脚本到/app/mysql/bin/ 下,并重命名为 my33006 my33007 my33008(事先写好的多实例启动脚本

  1. cd /app/mysql/
  2. cp ~/mysqld bin/my33006
  3. cp ~/mysqld bin/my33007
  4. cp ~/mysqld bin/my33008
  5. chmod 770 bin/my3300{6..8}

3) 逐个修改脚本变量

  1. 33006)
  2. port=33006
  3. mysql_user="root"
  4. mysql_pwd=""
  5. cmd_path="/app/mysql/bin"
  6. mysql_basedir="/data"
  7. mysql_sock="${mysql_basedir}/${port}/pid/my33006.sock"
  8.  
  9. 33007)
  10. port=33007
  11. mysql_user="root"
  12. mysql_pwd=""
  13. cmd_path="/app/mysql/bin"
  14. mysql_basedir="/data"
  15. mysql_sock="${mysql_basedir}/${port}/pid/my33007.sock"
  16.  
  17. 33008)
  18. port=33008
  19. mysql_user="root"
  20. mysql_pwd=""
  21. cmd_path="/app/mysql/bin"
  22. mysql_basedir="/data"
  23. mysql_sock="${mysql_basedir}/${port}/pid/my33008.sock"

这里需要注意的一点是”mysql_pwd=”centos””这个变量,当停止mysql服务的时候需要用到,因为数据库刚安装完毕,所以初始root口令为空,这里我们将其清空

4)启动数据库

  1. my33006 start
  2. my33007 start
  3. my33008 start
三、修改mysql每个初始库的用户密码
  1. mysqladmin -uroot -p -S /data/33006/pid/my33006.sock password '123123'
  2. mysqladmin -uroot -p -S /data/33007/pid/my33007.sock password '123123'
  3. mysqladmin -uroot -p -S /data/33008/pid/my33008.sock password '123123'

这时候停止数据库的时候需要输入密码,修改启动脚本中的mysql_pwd变量为当前新密码

四、本地连接多实例数据库方法

通过socket来区分每个实例

  1. mysql -uroot -p123123 -S /data/33006/pid/my33006.sock -h localhost

 

文档更新时间: 2020-05-25 12:16   作者:张尚