Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1058121
  • 博文数量: 321
  • 博客积分: 7872
  • 博客等级: 少将
  • 技术积分: 2120
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 09:06
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(1)

2015年(12)

2014年(17)

2013年(78)

2012年(15)

2011年(17)

2010年(67)

2009年(102)

2008年(11)

分类: LINUX

2013-03-20 15:12:31

关于单实例安装,参http://hi.baidu.com/traindiy/blog/item/a6d9b6317d710fb75fdf0e48.html

在单实例MYSQL基础上,扩展成多实例。

测试环境:
centos 6.2+mysql5.5.20
原先有安装过单独的mysql5.5.20 ,端口3306,数据库保存路径/mysqldata,
拟增加一个实例,数据库保存路径为/mysqldata2。
所有实例的socket文件和PID文件均保存到安装目录/usr/local/mysql下。

*********************************************************************************************
原理:把原单实例由mysqld启动,改为用mysqld_multi调用。重点有两个:

1、修改my.cnf

2、对mysqld_multi启动用户,必须在mysql中创建'user'@'localhost'和密码(与my.cnf中定义的须一致)


mysqld_multi服务会调用mysqladmin工具来启动和关闭服务。如下:
shell> mysqladmin -uroot -P3306 -p123456 shutdown -S /usr/local/mysql/mysql.sock
因此,在创建多实例时,配置文件[mysqld_multi]一组必须写上帐户和密码。
此帐户是MYSQL的帐户,而不是系统的帐户。并需在MYSQL中授予上述命令的shutdown权限。
这样才能正常使用mysqld_multi来关闭和启动MYSQL服务。
【注】创建多实例后,不能用chkconfig把mysqld_multi加入开机启动项。如果开机启动。可以
把以下命令加入/etc/rc.d/rc.local或.bashrc中:service mysqld_multi start
*********************************************************************************************

一、先按单实例安装。
二、增加实例:
1、停掉原mysqld服务,移除开机启动:
# service mysqld stop
# chkconfig --del mysqld


2、修改/etc/my.cnf,具体参附文,关键是:
-----------------------------------------------------------
[mysqld_multi]
mysqld          = /usr/local/mysql/bin/mysqld_safe
mysqladmin      = /usr/local/mysql/bin/mysqladmin
user            = mysql
password        = abc123
#注意这里user,使用mysql帐户启动。这个不是系统帐户,稍后会在MYSQL中创建并授权shutdown权限
#密码password是必须的,此帐户和密码将会由mysqladmin来调用。一会在mysql中创建用户后授予密码与此相同

[mysqld1]
port 
           = 3306
socket          = /usr/local/mysql/mysql.sock
pid-file        = /usr/local/mysql/mysql.pid
datadir         = /mysqldata
log-bin         = /mysqldata/mysql-bin.log
log             = /mysqldata/centos_3306.log
skip-name-resolve
# 如果有其它如innodb缓存等参数,接在本组下面写。
server-id       = 1

[mysqld2]
#内容同上,但port,socket,pid-file,datadir,log等要不同。
port            = 3307
socket          = /usr/local/mysql/mysql_3307.sock
pid-file        = /usr/local/mysql/mysql_3307.pid
#basedir        = /usr/local/mysql
datadir         = /mysqldata2
log-bin         = /mysqldata2/mysql-bin.log
log             = /mysqldata2/centos_3307.log   #此日志看需要而定,建议取消。
skip-name-resolve

server-id       = 2
...

[mysqldump]
....略
-----------------------------------------------------------
** 注意,每组的其它参数只能放在该组下,不能放在[mysqld_multi]下或其它地方。

 

3、为3307的新实例创建系统数据库。目录为/mysqldata2
# chown mysql.mysql -R /mysqldata2
# cd /usr/local/mysql
# scripts/mysql_install_db --datadir=/mysqldata2 --user=mysql

 

4、建立软链接到/usr/bin下,使命令调用简洁。
# ln -s /usr/local/mysql/bin/mysqld_multi /usr/bin/mysqld_multi
# ln -s /usr/local/mysql/bin/my_print_defaults /usr/bin/my_print_defaults
如果第二项my_print_defaults不做软链接,执行mysqld_multi可能会提示WARNING: my_print_defaults command not found错误。

 

5、启动多实例:
[root@centos62 mysql]# mysqld_multi start 1,2
[root@centos62 mysql]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running

注意:mysqld_multi 启动或关闭因调用mysqladmin,所以不会那么快,需等一会mysqld_multi report才能看到正确的结果。此命令用法参附文。
此时如果再执行mysqld_multi stop 1,2,然后用# mysqld_multi report,将仍会看到MYSQL实例仍在执行,这是因为还未在MYSQL中创建帐户。
所以mysqladmin还无法关闭。如果要在此时关闭,应执行# killall -15 mysqld

[root@centos62 mysql]# netstat -ltunp | grep 33  #查看端口
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      11900/mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      11895/mysqld

 

6、给新实例mysql2创建root的密码:
# mysqladmin -P3307 -uroot password '123456' -S /usr/local/mysql/mysql_3307.sock

 

7、现在进入MYSQL创建帐户并配密码。注意多实例进入MYSQL要加-S和-P(均大写)选项。
# mysql -uroot -p123456 -P3306 -S /usr/local/mysql/mysql.sock
mysql> create user mysql@localhost identified by 'abc123';  #密码'abc123'要和my.cnf中相同。
mysql> grant shutdown on *.* to mysql@localhost;
mysql > exit
再进入3307同样如上创建帐户和密码。确保每个实例均有和my.cnf中相同的帐户和密码。
# mysql -uroot -p123456 -P3307 -S /usr/local/mysql/mysql_3307.sock
mysql> ....(帐户创建同上,略。)....
【注:# mysql -uroot -p123456 -P3306 -S /usr/local/mysql/mysql.sock这里3306是默认端口,可省略-P3306,但其它实例不可略掉】

 

8、测试一下:
# mysqladmin -uroot -P3307 -p123456 shutdown -S /usr/local/mysql/mysql_3307.sock
# mysqladmin -uroot -P3306 -p123456 shutdown -S /usr/local/mysql/mysql.sock

 

9、把mysqld_multi复制到/etc/init.d/目录下。使命令service mysqld_multi start可用。
# cp bin/mysqld_multi /etc/init.d/mysqld_multi
# chmod 755 /etc/init.d/mysqld*
这样,以后不需再使用mysqld_multi start 1,2来启动了。直接使用service命令。
现在可以用更简单的办法启动:
# service mysqld_multi start  一次启动所有MYSQL实例
# service mysqld_multi stop   一次关闭所有MYSQL实例

10、加入启动项:
# vi /etc/rc.d/rc.local
添加一行:service mysqld_multi start

11、重启测试
# reboot
....重启..输入帐户和密码,重登录....查看....
# netstat -tlunp | grep mysql
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      2850/mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2852/mysqld

至此,就创建了有两个而且数据库(含MYSQL系统库)均独立的MYSQL实例

12、远程登录,如192.168.1.100要登录:
进入新实例后:
mysql> create user root@192.168.1.100 identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to root@192.168.1.100;

如此即可,如果发现远程仍无法登录,可以在SELINUX和IPTABLES中加入新端口:
# semanage port -a -t mysqld_port_t -p tcp 3307
# iptables -I INPUT -p tcp --dport 3307 -j ACCEPT
# service iptables save
[root@centos62 ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:opsession-prxy    #3307
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:mysql                     #3306
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh


****************************************************************
** 关于mysqld_multi命令的语法:
****************************************************************
shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR]...]
常用OPTIONS有:--user=mysql等,可不需要。
{start|stop|report}分别为{启动|关闭|报告状态},如上。
每一个GNR的值是my.cnf中组的序列号或是组的序列号范围。此项的值必须是组名字最后的数字,比如说如果组名为mysqld2,那么此项的值则为2.
如果指定一个范围,使用"-"(破折号)来连接二个数字。如GNR的值为10-13,则指组mysqld10到组mysqld13。
多个组或是组范围可以在命令行中指定,使用","(逗号)隔开。不能有空白的字符(如空格或tab),在空白字符后面的参数将会被忽略。 
如:
shell> mysqld_multi stop 8,10-13 停止选项组[mysql8]和[mysqld10]至[mysqld13]:
shell> mysqld_multi --example 列出my.cnf示例文档。
shell> mysqld_multi start 1-2 --log=/home/mysqls.log 会在home目录下创建如下内容的日志:
Starting MySQL servers
120308 20:17:36 mysqld_safe Logging to '/mysqldata/centos62.err'.
120308 20:17:36 mysqld_safe Logging to '/mysqldata2/centos62.err'.
120308 20:17:36 mysqld_safe Starting mysqld daemon with databases from /mysqldata
120308 20:17:36 mysqld_safe Starting mysqld daemon with databases from /mysqldata2
启动信息仍记入各实例的数据目录下centos62.err中。
*********************************************************
mysqld_multi支持下面的选项:
· --config-file=name
指定选项文件名。这关系到mysqld_multi从哪里寻找[mysqldN]选项组。没有该选项,从通用my.cnf文件读所有选项。选项不影响 mysqld_multi从哪里读

取自己的选项,总是从通用my.cnf文件的[mysqld_multi]组读取。
· --example 显示示例选项文件。
· --help 显示帮助消息并退出。
· --log=name 指定日志文件名。如果该文件存在,后面为日志输出。
· --mysqladmin=prog_name 用来停止服务器的mysqladmin二进制。
· --mysqld=prog_name  可用的mysqld二进制。请注意你还可以将该选项的值指定为mysqld_safe。选项被传递给 mysqld。确保在PATH环境变量设定值或

mysqld_safe中有mysqld所在目录。
· --no-log 按照标准输出打印日志信息,不要写入日志文件。默认情况下,输出写入日志文件。
· --password=password 调用mysqladmin时使用的MySQL账户的密码。请注意该密码值不是可选项,不象其它MySQL程序。
· --silent  禁用警告。
· --tcp-ip 通过TCP/IP端口而不是Unix套接字文件来连接每个MySQL服务器。(如果找不到套接字文件, 服务器仍然可以运行,但只能通过 TCP/IP端口

访问)。默认情况下,使用Unix套接字文件进行连接。该选项影响stop和report操作。
· --user=user_name 调用mysqladmin时使用的MySQL账户的用户名。
· --verbose  更详细。
· --version 显示版本信息并退出。

*********************************************************
其它注意事项:
· 你可能想要为mysqld使用--user选项,但为此你需要用Unix root用户运行mysqld_multi脚本。选项文件中有选项不要紧;如果你不是超级用户,并且你用自己的Unix账户重启mysqld进程,你只会得到警告。
· 重要:确保mysqld进程启动所用Unix账户可以完全访问数据目录。不要使用Unix root账户,除非你知道你在做什么。

转自:

阅读(925) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~