layout: post
title: Mysql的多实例部署
date: 2018-01-25
tags: [“Mariadb”,”软件服务”]
一、部署多实例
应工作需要,有时需要我们在一台服务其上启动多个mysql实例,实现方法有很多种,这里只介绍一种也是推荐使用的,因为相对于其他的方法,这种方法会比较灵活。
二、部署步骤
我们使用已经用源码安装好的mysql-server端来部署多实例,安装步骤可见Mariadb的多种安装方法。
下图为我们要创建的多实例的目录树
db是用来保存数据库数据的目录,etc保存每个实例的配置文件,pid为保存实例运行时的pid文件和socket文件。
我们将会按照上图创建三个实例,以下为执行步骤:
1、创建目录
- mkdir -p /data/3300{6..8}/{db,etc,pid}
2、拷贝配置文件到第一个etc目录并修改,作为模板然后拷贝到其他的etc目录
1)对端口为33006的实例操作
- cd /app/mysq/support-files/
- cp my-innodb-heavy-4G.cnf /data/33006/etc/my.cnf
- vim my.cnf
- 在mysqld下添加如下项目
- datadir = /data/33006/db
- innodb_file_per_table = on
- skip_name_resolve = on
- 修改mysqld下
- port = 33006
- socket = /data/33006/pid/mysql.sock
- 在mysqld_safe标签下添加
- log-error=//data/33007/pid/mysql_33006.err.log
- pid-file= /data/33006/pid/mysql_33006.pid
2)对端口为33007的实例操作
- cp /data/33006/etc/my.cnf /data/33007/etc/my.cnf
- vim my.cnf
- 在mysqld下修改如下项目
- datadir = /data/33007/db
- innodb_file_per_table = on
- skip_name_resolve = on
- 修改mysqld下
- port = 33007
- socket = /data/33007/pid/mysql.sock
- 在mysqld_safe标签下添加
- log-error=//data/33007/pid/mysql_33007.err.log
- pid-file= /data/33007/pid/mysql_33007.pid
3)对端口为33008的实例操作
- cp /data/33006/etc/my.cnf /data/33008/etc/my.cnf
- vim my.cnf
- 在mysqld下修改如下项目
- datadir = /data/33008/db
- innodb_file_per_table = on
- skip_name_resolve = on
- 修改mysqld下
- port = 33008
- socket = /data/33007/pid/mysql.sock
- 在mysqld_safe标签下添加
- log-error=//data/33007/pid/mysql_33008.err.log
- pid-file= /data/33007/pid/mysql_33008.pid
注意:如果实在虚拟机中进行的操作,建议注视掉”innodb_additional_mem_pool_size”这一项,如果内存分配过少,这项会启动报错。
3、初始化各实例数据库
首先要确保权限的问题
- chown -R mysql.root /data/3300{6..8}
初始化
- cd /app/mysql
- scripts/mysql_install_db --datadir=/data/33006/db --basedir=/app/mysql --user=mysql
- scripts/mysql_install_db --datadir=/data/33007/db --basedir=/app/mysql --user=mysql
- scripts/mysql_install_db --datadir=/data/33008/db --basedir=/app/mysql --user=mysql
4、数据库初始化完成之后,启动数据库
启动数据库我们可以直接通过mysqld_safe命令直接启动每个实例,但是比较繁琐,所以还是借助其启动脚本来实现比较方便。
实现方法:
1)添加环境变量,让系统可以找到mysql的可执行命令
- echo 'PATH=/app/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
- . /etc/profile.d/mysql.sh
2) 复制启动脚本到/app/mysql/bin/ 下,并重命名为 my33006 my33007 my33008(事先写好的多实例启动脚本)
- cd /app/mysql/
- cp ~/mysqld bin/my33006
- cp ~/mysqld bin/my33007
- cp ~/mysqld bin/my33008
- chmod 770 bin/my3300{6..8}
3) 逐个修改脚本变量
- 33006)
- port=33006
- mysql_user="root"
- mysql_pwd=""
- cmd_path="/app/mysql/bin"
- mysql_basedir="/data"
- mysql_sock="${mysql_basedir}/${port}/pid/my33006.sock"
- 33007)
- port=33007
- mysql_user="root"
- mysql_pwd=""
- cmd_path="/app/mysql/bin"
- mysql_basedir="/data"
- mysql_sock="${mysql_basedir}/${port}/pid/my33007.sock"
- 33008)
- port=33008
- mysql_user="root"
- mysql_pwd=""
- cmd_path="/app/mysql/bin"
- mysql_basedir="/data"
- mysql_sock="${mysql_basedir}/${port}/pid/my33008.sock"
这里需要注意的一点是”mysql_pwd=”centos””这个变量,当停止mysql服务的时候需要用到,因为数据库刚安装完毕,所以初始root口令为空,这里我们将其清空
4)启动数据库
三、修改mysql每个初始库的用户密码
- my33006 start
- my33007 start
- my33008 start
- mysqladmin -uroot -p -S /data/33006/pid/my33006.sock password '123123'
- mysqladmin -uroot -p -S /data/33007/pid/my33007.sock password '123123'
- mysqladmin -uroot -p -S /data/33008/pid/my33008.sock password '123123'
这时候停止数据库的时候需要输入密码,修改启动脚本中的mysql_pwd变量为当前新密码
四、本地连接多实例数据库方法
通过socket来区分每个实例
- mysql -uroot -p123123 -S /data/33006/pid/my33006.sock -h localhost