Mysql单主机多实例部署

  • 基础环境


1.部署环境

CentOS 7

5.6.42 MySQL Community Server (GPL)



2.MySQL环境准备



1)yum安装MySQL
# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 
# yum repolist
# yum -y install mysql-community-server



2)启动MySQL
# systemctl is-enabled mysqld

mysql安装多个实例 mysql多版本多实例部署_mysql安装多个实例

# systemctl start mysqld



3)Mysql安全调整
# mysql_secure_installation

mysql安装多个实例 mysql多版本多实例部署_数据库_02



4)登陆测试
# mysql -u root -p

mysql安装多个实例 mysql多版本多实例部署_开发工具_03


以上说明登陆成功,查看MySQL的用户权限:

mysql> select user,host,password from mysql.user \G;

mysql安装多个实例 mysql多版本多实例部署_运维_04


    在这里可以看到有四个登录账号,user表示登录名,host表示登录主机限制,password为散列后的登录密码,其中%表示任意,如host的%表示可以任意主机登录,在之后会写到怎样修改这些登录数据。

  • 多实例部署


1.创建目录并授权

这里根据占用的端口来创建,便于区分

# mkdir -p /data/multiMysql/{etc,socket,bin,datadir/330{7,8,9}}

然后用mysql_install_db来生成即将使用的多个实例的数据文件,首先需要对/data/multiMysql进行递归授权防止之后的操作出现权限不够的情况:

# chmod -R 777 /data/multiMysql 或 # chown -R mysql.mysql /data/multiMysql/



2. Mysql数据库初始化

    3307,3308,3309均执行一次。

# mysql_install_db --basedir=/usr --datadir=/data/multiMysql/datadir/3307 --user=mysql
# mysql_install_db --basedir=/usr --datadir=/data/multiMysql/datadir/3308 --user=mysql
# mysql_install_db --basedir=/usr --datadir=/data/multiMysql/datadir/3309 --user=mysql

其中的参数--basedir是指mysql的二进制文件目录,--datadir是指即将安装到的数据库文件目录,--basedir可以登录进mysql后查询:

mysql> show variables like '%basedir%';

mysql安装多个实例 mysql多版本多实例部署_开发工具_05

--user是指mysql实例将使用的在linux系统中的用户,最好命名为mysql,yum安装的方式一般都有这个用户,如果没有可以自主创建:

# groupadd mysql
#  useradd -g mysql mysql

现在来查看三份数据文件有没有生成,例如查看3308的:

# ls /data/multiMysql/datadir/3308/

mysql安装多个实例 mysql多版本多实例部署_mysql_06

如果里面有文件代表生成成功。



3.多实例配置:



1)创建公用配置文件:
# mkdir /data/multiMysql/etc/my.cnf.d/
# vim /data/multiMysql/etc/my.cnf.d/my.cnf
[mysqld]
skip-name-resolve
lower_case_table_names=1
innodb_file_per_table=1
back_log = 50
max_connections = 300
max_connect_errors = 1000
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 2M
max_heap_table_size = 64M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 64
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
server-id = 1
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 200M
innodb_data_file_path = ibdata1:10M:autoextend
innodb_file_io_threads = 8
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 60
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 256M
[mysql]
no-auto-rehash
prompt=\\u@\\d \\R:\\m>
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192



2)创建三个实例的配置文件
# vim /data/multiMysql/etc/3307.cnf
[client]

port = 3307

socket = /data/multiMysql/socket/mysql3307.sock

[mysqld]

datadir=/data/multiMysql/datadir/3307

port = 3307

socket = /data/multiMysql/socket/mysql3307.sock

log-error=/data/multiMysql/datadir/3307/mysqld3307.log

pid-file=/data/multiMysql/datadir/3307/mysqld3307.pid


!includedir /data/multiMysql/etc/my.cnf.d

复制3307.cnf:

# cd /data/multiMysql/etc/
# cp 3307.cnf 3308.cnf
# cp 3307.cnf 3309.cnf

编辑复制的两份配置文件,把其中的3307修改为3308或3309。

# cat 3308.cnf

mysql安装多个实例 mysql多版本多实例部署_mysql安装多个实例_07

# cat 3309.cnf

mysql安装多个实例 mysql多版本多实例部署_mysql_08

在配置文件中,port是实例的端口,socket是实例运行时的sock文件,datadir是之前生成的数据库文件位置。

  • 启动实例


1.编辑实例启动脚本

# vim /data/multiMysql/bin/mysqlctl
#!/bin/bash

. /etc/init.d/functions

PORT=$2

USER=root

PASSWD=

MYSQLBIN='/usr/bin'

SOCKETFILE="/data/multiMysql/socket/mysql${PORT}.sock"

MYCNF="/data/multiMysql/etc/${PORT}.cnf"


[[ $# -eq 2 ]] || {

    echo "Usage: $0 {start|stop|restart}  {PORT}"

    exit 1

}


mysql_start() {

    [[ -e "$SOCKETFILE" ]] && {

       action "MySQL port: $PORT IS already running" /bin/false

       exit 0

    } || {

       action "Starting MySQL...  please wait" /bin/true

       $MYSQLBIN/mysqld_safe --defaults-file=$MYCNF &> /dev/null &

    }


    [[ "$?" == "0" ]] && {

       action "MySQL has been Started" /bin/true

    } || {

       action "MySQL Started" /bin/false

    }

}



mysql_stop() {

    [[ ! -e "$SOCKETFILE" ]] && {

       action "MySQL port:$PORT was already down" /bin/false

    } || {

       $MYSQLBIN/mysqladmin -u $USER -p$PASSWD -S $SOCKETFILE shutdown &>/dev/null

    }

    [[ "$?" == 0 ]] && {

       action  "MySQL port:$PORT has been Stopped" /bin/true

    } 

}


case "$1" in

'start')

    mysql_start

    ;;

'stop')

    mysql_stop

    ;;

'restart')

    mysql_stop

    sleep 3

    mysql_start

    ;;

*)

    echo "Usage: $0 {start|stop|restart}  {PORT}"

esac

    因为是yum安装,所以mysqld_safe和mysqladmin可以不用加路径直接运行,另外mysql_port是指这个bash简要打开的实例的端口,mysql_username和mysql_userpassword即将在实例中配置的可关闭mysql进程的mysql用户名和密码。

给予mysqlctl文件执行权限,并尝试打开三个实例:

# chmod +x /data/multiMysql/bin/mysqlctl

先关闭yum安装的默认mysql实例进程:

# systemctl stop mysqld



2.启动三个实例

# /data/multiMysql/bin/mysqlctl start 3307

mysql安装多个实例 mysql多版本多实例部署_mysql_09

# /data/multiMysql/bin/mysqlctl start 3308

mysql安装多个实例 mysql多版本多实例部署_开发工具_10

# /data/multiMysql/bin/mysqlctl start 3309

mysql安装多个实例 mysql多版本多实例部署_运维_11

查看是否有三个mysql进程:

# ps -ef | grep mysql

mysql安装多个实例 mysql多版本多实例部署_数据库_12

显示以上则说明实例启动成功。

  • 连接测试


1.连接实例

连接监听于3307端口的实例

# mysql -u root -S /data/multiMysql/socket/mysql3307.sock

mysql安装多个实例 mysql多版本多实例部署_运维_13

连接监听于3308端口的实例

# mysql -u root -S /data/multiMysql/socket/mysql3308.sock

mysql安装多个实例 mysql多版本多实例部署_mysql_14

连接监听于3309端口的实例

# mysql -u root -S /data/multiMysql/socket/mysql3309.sock

mysql安装多个实例 mysql多版本多实例部署_mysql_15

以上则说明实例能够连接成功。



2.打开实例

例如:连接3307的sock后执行sql:

mysql> show variables like '%port%';

mysql安装多个实例 mysql多版本多实例部署_开发工具_16

    以上则说明成功打开实例。

后续建立用户、创建密码、修改权限、自启动设置不再赘述。

至此,三个mysql实例创建到此结束。