rhel6下,mysql5.6.14 多实例配置

更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)

在我们的生产环境中,很少一台db server就一个mysql实例,从节约成本和充分利用资源的角度出发,我们往往会在主从环境下,对从机的db server 安装多个mysql实例,用来同步主db server的相应实例

1.mysql 多实例的控制原理:
多实例通过Mysqld_multi 可以管理多个监听不同的 unix 套字节文件和 TCP/IP 端口的连接的 mysqld 进程,包括 start,stop,status。
默认的 mysqld_multi 是读取 my.cnf 中的[mysqld/N]中的数据,N 一定是正整数,如果你是单独写的文件,可以通过--config-file 参数来指定读取的 configfile。
mysqld_multi 的 option
usage:
myysqld_multi [optinos] {start|stop|report} [GNR[,GNR]..]
option:
start|stop |report
GNR 指的是[msyqld/N]中的 N,GNR 中不能有空格和 tab
mysqld_multi start 10 就是启动 my.cnf 中的 10 的实例;mysqld_multi start 1,4-6 就是启动 1,4 到 6 个实例
如果任何参数都不加入的话,默认会启动所有的实例
登陆会话,则指定对应mysq实例的套接字文件:mysql -uuser -ppassword -S sockpath

2.下面我们简单搭建一台DB server启动两个mysql实例[主从同步,会在下一篇文章中搭建]
(1).我默认在这台DB server上已经安装一个mysql 实例[ 我这里是源码安装的mysql,各位可以采用RPM、二进制、源码等方式安装一个mysql ]
数据库安装目录:/usr/local/mysql
3306实例数据存放目录:/home/mysql/data
(2).新建第二个mysql实例数据存放目录,目录名为:data_3307
[root@client100 mysql]# mkdir -p /home/mysql/data_3307
# 修改数据目录的属主
[root@client100 mysql]# chown  mysql. -R  /home/mysql/data_3307
(3).编辑数据库配置文件:/etc/my.cnf
[root@client100 mysql]# vim /etc/my.cnf
[mysqld_multi]
# 指定相关命令的路径
mysqld     =  /usr/local/mysql/bin/mysqld_safe
mysqladmin =  /usr/local/mysql/bin/mysqladmin
# 指定用户,用于启动和关闭mysql服务[这里尽量使用root用户,默认root用户拥有所以权限,记得在两个实例中root密码一致]
user = root
password = kongzhong
# 指定错误日志路径
log = /usr/local/mysql/multi.log
[mysqld3306]
basedir =/usr/local/mysql
datadir =/home/mysql/data
socket = /usr/local/mysql/mysqld3306.sock
pid-file = /home/mysql/data/mysql3306.pid
general_log = 1
general_log_file = /home/mysql/data/mysql3306.log
port =3306
server_id =100
user = mysql
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
default_storage_engine = MYISAM
join_buffer_size = 128M
max_allowed_packet= 1M
net_buffer_length= 8K
skip-external-locking
skip-host-cache
skip-name-resolve
# InnoDB
innodb_buffer_pool_size = 128M
innodb_log_file_size = 48M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
# MyISAM
key_buffer_size = 48M
character-set-server=utf8
collation-server=utf8_general_ci
# LOG
log_error = /home/mysql/data/mysql-error.log
long_query_time = 1
slow-query-log
slow_query_log_file = /home/mysql/data/mysql-slow.log
# Others
explicit_defaults_for_timestamp=true
max_connections = 500
open_files_limit = 65535
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld3307]
basedir =/usr/local/mysql
datadir =/home/mysql/data_3307
socket = /usr/local/mysql/mysqld3307.sock
pid-file = /home/mysql/data_3307/mysql3307.pid
general_log = 1
general_log_file = /home/mysql/data_3307/mysql3307.log
port =3307
server_id =101
user = mysql
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
default_storage_engine = MYISAM
join_buffer_size = 128M
max_allowed_packet= 1M
net_buffer_length= 8K
skip-external-locking
skip-host-cache
skip-name-resolve
# InnoDB
innodb_buffer_pool_size = 128M
innodb_log_file_size = 48M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
# MyISAM
key_buffer_size = 48M
character-set-server=utf8
collation-server=utf8_general_ci
# LOG
log_error = /home/mysql/data_3307/mysql-error.log
long_query_time = 1
slow-query-log
slow_query_log_file = /home/mysql/data_3307/mysql-slow.log
# Others
explicit_defaults_for_timestamp=true
max_connections = 500
open_files_limit = 65535
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

(4).为第二个实例初始化数据库:
# 进入数据库安装目录
[root@client100 mysql]# cd /usr/local/mysql/scripts/
# 执行初始化脚本,指定数据目录/用户
[root@client100 scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/home/mysql/data_3307 --user=mysql

(5).使用mysqld_multi命令启动相应实例[如果my.cnf不在默认位置,需指明位置--defaults-extra-file=****]
# 启动相应实例
[root@client100 ~]# mysqld_multi start 3306
[root@client100 ~]# mysqld_multi start 3307
# 使用如下命令检测 mysql 相应实例进程是否启动
[root@client100 ~]# ps -ef |grep mysql
# 使用netstat 检测mysql两个实例端口是否启动[看到两个端口的监听都出现,就说明搭建正常]
[root@client100 ~]# netstat -ntlp |grep mysql
# 使用如下两条命令,可登陆到对应实例数据库
[root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p
[root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3307.sock -p
# 登陆后,可查看参数,查看数据存放目录,以确认是否登陆自己要登陆的实例
mysql> show variables like '%datadir%'
# 关闭实例
[root@client100 ~]# mysqld_multi stop 3306
[root@client100 ~]# mysqld_multi stop 3307
# 如果执行以上命令,不能关闭的话,请使用以下方式关闭
[root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3307.sock shutdown
[root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3306.sock shutdown
## 有的朋友可能在使用 mysqld_multi stop 关闭时,始终有实例关闭不了,这里就是/etc/my.cnf中user/password的作用
## 需要做如下操作:
## 如果你指定的用户不是root用户,那最好拥有mysql的所有目录权限,不然会报权限不够,所以建议用mysql或root用户
## 如果是root用户,因为root拥有所有权限,所以只要设置两个实例的密码都是一样的就行
## 而对于mysql,则编译安装时,创建用户是就要允许此用户登录,即不要加nologin限制
## 并登录到实例数据库后,授予shutdown权限,设置密码
mysql>  GRANT SHUTDOWN ON *.* TO 'mysql'@'localhost' IDENTIFIED BY 'kongzhong';
mysql> flush privileges
## 现在再用 mysqld_multi stop 关闭,就可正常关闭[还是那句,建议用root]

你可能感兴趣的:(mysql,mysql,linux,多实例,red,RHEL6,hat,6,5.6.14)