Mysql多实例介绍
MySQL数据库的集中化运维,可以通过在一台MySQL数据库服务器上,部署多个MySQL实例。该功能是通过mysqld_multi来实现。mysqld_multi用于管理多个mysqld的服务进程,这些mysqld服务进程程序可以用不同的socket或是监听于不同的端口,同时将数据文件分布到不同的磁盘以分散IO。mysqld_multi提供简单的命令用于启动,关闭和报告所管理的服务器的状态。从而减少生产环境的维护成本,方便后续的迁移和清理等工作,借助多实例绑定的方式提高服务器的整体资源利用率。对于多实例的配置有2种方式,一种是在my.cnf为所有实例提供配置,一种是使用每一个实例一个配置文件。
MySQL数据库的集中化运维,可以通过在一台MySQL数据库服务器上,部署多个MySQL实例。该功能是通过mysqld_multi来实现。mysqld_multi用于管理多个mysqld的服务进程,这些mysqld服务进程程序可以用不同的socket或是监听于不同的端口,同时将数据文件分布到不同的磁盘以分散IO。mysqld_multi提供简单的命令用于启动,关闭和报告所管理的服务器的状态。从而减少生产环境的维护成本,方便后续的迁移和清理等工作,借助多实例绑定的方式提高服务器的整体资源利用率。对于多实例的配置有2种方式,一种是在my.cnf为所有实例提供配置,一种是使用每一个实例一个配置文件。
(一)多实例配置实战--每一个实例配置一个文件
配置mysql相关命令全局变量路径
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
配置每个实例配置文件和启动文件data.zip
授权mysql用户访问写入/data/的权限
mkdir -p /data/{3306,3307,3308}
chown -R mysql.mysql /data
find /data -type f -name mysql |xargs chmod +x
chown -R mysql.mysql /data
find /data -type f -name mysql |xargs chmod +x
cp /etc/my.cnf /data/3306/
cp /etc/my.cnf /data/3307/
cp /etc/my.cnf /data/3308/
在my.cnf中的mysqld中添加datadir = /data/3306/data/
datadir = /data/3307/data/
datadir = /data/3308/data/
mysql5.1.x初始化命令
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=MySQL
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=MySQL
启动多实例服务
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
停止多实例服务
mysqladmin -S /data/3306/mysql.sock shutdown
mysqladmin -S /data/3307/mysql.sock shutdown
mysqladmin -S /data/3306/mysql.sock shutdown
mysqladmin -S /data/3307/mysql.sock shutdown
(二).所有实例使用一个配置文件
# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
# Here follows entries for some specific programs
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /tmp/mysqld_multi.log
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /tmp/mysqld_multi.log
# The MySQL server
[mysqld]
user = mysql
basedir = /usr/local/mysql
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld]
user = mysql
basedir = /usr/local/mysql
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld3306]
mysqld = mysqld
mysqladmin = mysqladmin
datadir= /data/3306/data
port=3306
server_id = 3306
socket = /data/3306/mysql.sock
mysqld = mysqld
mysqladmin = mysqladmin
datadir= /data/3306/data
port=3306
server_id = 3306
socket = /data/3306/mysql.sock
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/3306/slow.log
log-error = /data/3306/error.log
binlog_format = mixed
log-bin = /data/3306/mysql3306_bin
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/3306/slow.log
log-error = /data/3306/error.log
binlog_format = mixed
log-bin = /data/3306/mysql3306_bin
[mysqld3307]
mysqld = mysqld
mysqladmin = mysqladmin
datadir= /data/3307/data
port=3307
server_id = 3307
socket = /data/3307/mysql.sock
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/3307/slow.log
log-error = /data/3307/error.log
binlog_format = mixed
log-bin = /data/3307/mysql3307_bin
mysqld = mysqld
mysqladmin = mysqladmin
datadir= /data/3307/data
port=3307
server_id = 3307
socket = /data/3307/mysql.sock
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/3307/slow.log
log-error = /data/3307/error.log
binlog_format = mixed
log-bin = /data/3307/mysql3307_bin
初始化数据库
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=MySQL
启动全部实例:/usr/local/mysql/bin/mysqld_multi start
查看全部实例状态:/usr/local/mysql/bin/mysqld_multi report
启动单个实例:/usr/local/mysql/bin/mysqld_multi start 3306
停止单个实例:/usr/local/mysql/bin/mysqld_multi stop 3306
查看单个实例状态:/usr/local/mysql/bin/mysqld_multi report 3306