背景
由于项目要求,需要在一台服务器上面安装mysql,并部署多个mysql实例。
该文章主要介绍ubuntu环境下面,mysql的安装,以及启动mysql多实例方法
环境信息
操作系统 ubuntu 14.04 64位
数据库目标版本 mysql 5.6.16
mysql 实例数 2个
mysql 实例端口 13306 13307
安装mysql
建议:请使用非root用户安装,以下安装过程中需要root权限时,用sudo执行
增加mysql用户及组
groupadd mysql
useradd -r -g mysql mysql
下载mysql安装包
$ cd /workspace/src
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz
编译安装msyql
$ tar zxvf mysql-VERSION.tar.gz
$ cd mysql-VERSION
$ cmake .
$ make
$ make install
更新目录权限
$ cd /usr/local/mysql
$ sudo chown -R mysql .
$ sudo chgrp -R mysql .
至此,mysql的安装过程已经完成
启动mysql多实例
mysql的多实例有两种方式可以实现,两种方式各有利弊。
第一种:
使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。
第二种:
通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。
考虑到多实例之间的启动不受影响,因此本该采用第一种方式启动mysql多实例
启动实例
为数据库实例创建data目录,并修改目录组权限
$ cd /data
$ sudo mkdir mysql_13306
$ sudo mkdir mysql_13307
$ sudo chown mysql:mysql -R /data
初始化数据库
$ cd /usr/local/mysql/scripts
$ sudo ./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_13306
$ sudo ./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_13307
为两个实例新增my.cnf配置文件
首先为13306的实例增加my.cnf配置文件
$ cd /data/mysql_13306
$ sudo vim my.cnf
其中内容如下
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[mysql]
# CLIENT #
port = 13306
socket = /data/mysql_13306/mysqld.sock
[mysqld]
# GENERAL #
# 特别注意的是这一句,port = 13306 的,如果这句不写,mysqld会默认在3306端口启动实例,也就是说,如果要启动多实例,但
# 在多个实例的配置文件中,都没有配置这个参数,就会使用默认的3306端口,这样第一个实例启动后,就会将3306端占用,第二个
# 及以后的实例启动时,因为3306端口被占用,所以无法成功启动多实例
port= 13306
user = mysql
default-storage-engine = InnoDB
socket = /data/mysql_13306/mysqld.sock
pid-file = /data/mysql_13306/mysql.pid
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
# DATA STORAGE #
datadir = /data/mysql_13306
# BINARY LOGGING #
log-bin = /data/mysql_13306/mysql-bin
expire-logs-days = 14
sync-binlog = 1
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 500
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 512M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 1G
# LOGGING #
log-error = /data/mysql_13306/mysql-error.log
log-queries-not-using-indexes = 1
slow-query-log = 1
slow-query-log-file = /data/mysql_13306/mysql-slow.log
为13307实例增加my.cnf配置文件
$ cd /data/mysql_13307
$ sudo vim my.cnf
其中内容和上面的一样,只是将上面配置文件中所有的13306修改为13307即可
为13306,13307两个实例创建自动启动脚本
$ cd /data/mysql_13306
$ sudo vim mysqld
#!/bin/bash
mysql_port=13306
mysql_username="root"
mysql_password=""
#启动mysql
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql_${mysql_port}/my.cnf 2>&1 > /dev/null &
}
#停止mysql
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/usr/local/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /data/mysql_${mysql_port}/mysqld.sock shutdown
}
#重新启动mysql
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
#Kill mysql
function_kill_mysql()
{
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/mysql_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac
#为mysqld增加执行权限
$ sudo chmod 700 mysqld
为13307实例增加自动启动脚本
$ cd /data/mysql_13307
$ sudo vim mysqld
#mysql_13307目录下面的,mysqld内容和上面的内容一致,只是将13306修改为13307即可
$ sudo chmod 700 mysqld
启动13306,13307实例
$ sudo /data/mysql_13306/mysqld start
$ sudo /data/mysql_13307/mysqld start
设置mysql的root密码
$ /usr/local/mysql/bin/mysql -uroot -p -S /data/mysql_13306/mysql.sock
# 默认情况下安装的mysql root密码为空,在以下命令中设置mysql用户的root密码
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');
也可以用如下方式设置root密
$ /usr/local/mysql/bin/mysqladmin -uroot password 'password' -S /data/mysql_13306/mysqld.sock
$ /usr/local/mysql/bin/mysqladmin -uroot password 'password' -S /data/mysql_13307/mysqld.sock
更改环境变量
$ sudo vim /etc/profile
#添加下面一行内容
$ sudo PATH=${PATH}:/usr/local/mysql/bin/
$ sudo source /etc/profile