Home  >  Article  >  Database  >  rhel6下,mysql5.6.14 多实例配置

rhel6下,mysql5.6.14 多实例配置

WBOY
WBOYOriginal
2016-06-07 17:37:51818browse

更多博文请关注:没有伞的孩子必须努力奔跑(www.xuchanggang.cn)在我们的生产环境中,很少一台dbserver就一个mysql实例,从节约成本和充分利用资源的角度出发,

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

在我们的生产环境中,很少一台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 |reportGNR 指的是[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]

本文出自 “没有伞的孩子必须努力奔跑” 博客,请务必保留此出处

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn