mysql多实例学习

原创 2012年03月16日 11:37:59

mysql多实例,每个实例的datadir,pid,port,socket应该是不同的

一、基础,很重要

每个实例应该在自己的datadir下配置my.cnf文件。
首先说下配置文件的查找顺序
第一搜,首先读取/etc/my.cnf
第二搜,$datadir/my.cnf,在data目录下寻找此配置文件,每个实例应该在自己的datadir下配置my.cnf文件。
第三搜,defaultfile=/path/my.cnf 通常写在命令行上,mysqld_safe defaultfile=/tmp/my.cnf &等执行。
第四搜,~/my.cnf 当前用户下的配置文件。


二、为各个实例配置datadir(例子中利用默认实例数据)

停掉mysql默认的服务(防止出现损坏默认实例数据库的情况):service mysql 

stop

复制datadir
[root@localhost lib]# cp -r mysql /var/lib/mysql_3301
[root@localhost lib]# cp -r mysql /var/lib/mysql_3302

把mysql设置为owner
[root@localhost lib]# chown -R mysql.mysql mysql_3301
[root@localhost lib]# chown -R mysql.mysql mysql_3302

把mysql设置为文件夹内文件的owner
[root@localhost lib]# cd mysql_3301
[root@localhost mysql_3301]# chown -R mysql.mysql *
[root@localhost mysql_3301]# cd ../mysql_3302
[root@localhost mysql_3302]# chown -R mysql.mysql *

注释:
开始失败的原因在于mysql_3301与mysql_3302文件夹下的文件没有赋权于mysql用

户,导致错误
cd mysql_3301
chown -R mysql.mysql *
cd ../mysql_3302
chown -R mysql.mysql *

三、配置文件选项:


[root@localhost mysql_3302]# cd /usr/local
[root@localhost local]# vi my_multi.cnf

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = root

[mysqld1]
socket     = /tmp/mysql_3301.sock
port       = 3301
pid-file   = /var/lib/mysql_3301/hostname.pid
datadir    = /var/lib/mysql_3301/
log        = /var/lib/mysql_3301/hostname.log
user       = mysql


[mysqld2]
socket     = /tmp/mysql_3302.sock
port       = 3302
pid-file   = /var/lib/mysql_3302/hostname.pid
datadir    = /var/lib/mysql_3302/
log        = /var/lib/mysql_3302/hostname.log
user       = mysql


四、 启动实例:
/usr/bin/mysqld_multi --config-file=/usr/local/my_multi.cnf start 1
/usr/bin/mysqld_multi --config-file=/usr/local/my_multi.cnf start 2

测试实例:
查看端口:
[@19.109 ~]# netstat -lt|grep 33
tcp        0      0 *:3301                      *:*                     

    LISTEN      
tcp        0      0 *:3302                      *:*                     

    LISTEN 

五、分别测试三个实例:


0:25 2009-11-6
实例1.
1.1通过socket连接
仔细看下实例一的这五个实验,你会发现它们使用的datadir不相同,都是同一个服务,为什么不同呢?

[root@localhost local]# mysql -u root  -h localhost -S/tmp/mysql_3301.sock
mysql> show variables like '%datadir%';\q
+---------------+----------------------+
| Variable_name | Value                |
+---------------+----------------------+
| datadir       | /var/lib/mysql_3301/ | 
+---------------+----------------------+

[root@localhost local]# mysql -u root  -h 127.0.0.1 -S/tmp/mysql_3301.sock
mysql> show variables like '%datadir%';\q
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ | 
+---------------+-----------------+

[root@localhost local]# mysql -u root   -S/tmp/mysql_3301.sock

mysql> show variables like '%datadir%';\q
+---------------+----------------------+
| Variable_name | Value                |
+---------------+----------------------+
| datadir       | /var/lib/mysql_3301/ | 
+---------------+----------------------+

1.2通过port连接
[root@localhost local]# mysql -u root -h 127.0.0.1 -P 3301
mysql> show variables like '%datadir%';\q
+---------------+----------------------+
| Variable_name | Value                |
+---------------+----------------------+
| datadir       | /var/lib/mysql_3301/ | 
+---------------+----------------------+

[root@localhost local]# mysql -u root -h localhost -P 3301
mysql> show variables like '%datadir%';\q
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ | 
+---------------+-----------------+



实例2.经验证,已经启动,其它同实例1
[root@localhost local]# mysql -u root -h 127.0.0.1 -P 3302
mysql> show variables like '%datadir%';\q
+---------------+----------------------+
| Variable_name | Value                |
+---------------+----------------------+
| datadir       | /var/lib/mysql_3302/ | 
+---------------+----------------------+

[root@localhost local]# mysql -u root -h localhost -P 3302
mysql> show variables like '%datadir%';\q
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ | 
+---------------+-----------------+
1 row in set (0.01 sec)




六. 实现自动启动:
[root@localhost local]# vi /etc/rc.local
/usr/bin/mysqld_multi --config-file=/usr/local/my_multi.cnf start 1,2



七 问题区

上面的socket与Port, 127.0.0.1与localhost,看似都一样的东西,为什么结果却大不相同呢???

今天晚上在手册中搜索了一下,在手册5.12.3节找到了答案,分享一下:

在多服务器环境中使用客户端程序
当你想要用一个客户端程序连接一个MySQL服务器时,该服务器侦听不同的网络接口,而不是编译到你的客户端的网络接口,你可以使用下面的方法:

·         启动客户端,用--host=host_name --port=port_number通过TCP/IP来连接一个远程服务器,用--host=127.0.0.1 --port=port_number通过TCP/IP来连接一个本地服务器,或者用--host=localhost --socket=file_name通过一个Unix套接字文件或一个Windows命名管道来连接一个本地服务器。

·         从MySQL 4.1起,启动客户端时用--protocol=tcp通过TCP/IP来连接,用--protocol=socket通过一个Unix套接字文件来连接,用--protocol=pipe通过一个命名管道来连接,或用--protocol=memory通过共享内存来连接。对于TCP/IP连接,你可能还需要指定--host和--port选项。对于其它类型的连接,你可能需要指定一个--socket选项来指定一个Unix套接字文件或命名管道名,或者一个--shared-memory-base-name选项来指定共享内存名。共享内存连接仅在Windows中支持。

·         在Unix中,在你启动客户端之前,设置MYSQL_UNIX_PORT和MYSQL_TCP_PORT环境变量来指定Unix套接字文件和TCP/IP端口号。如果你经常使用具体的套接字文件或端口号,你可以在.login文件中放置命令来设置环境变量以便你每次登录时该命令起作用。参见附录F:环境变量。

·         在一个选项文件的[client]组中指定默认Unix套接字文件和TCP/IP端口号。例如,你可以在Windows中使用C:\my.cnf文件,或在Unix中主目录内使用.my.cnf文件。参见4.3.2节,“使用选项文件”。

怎样查看mysql pid文件路径 文件位置

当MySQL实例启动时,会将自己的进程ID写入一个文件中——该文件即为pid文件。该文件可由参数pid_file控制,默认位于数据库目录下,文件名为主机名.pid: mysql> show va...
  • u010098331
  • u010098331
  • 2016年03月03日 10:01
  • 5371

mysql多实例(多个配置文件方式)

1 环境介绍: 1)简介 mysql 版本:mysql-5.5.27 cmake:cmake-2.8.8 操作系统:CentOS6.5 mysql实例数:3个 实例占用端口分别为:3306、330...
  • CleverCode
  • CleverCode
  • 2015年08月13日 12:22
  • 4192

MySQL运行两个或多个实例

mysql可以以多实例的方式,实现一台服务器,运行在不同端口不同数据文件的mysql,它们是相互独立的。 1、关闭原有的默认端口3306的mysql:service mysqd stop ...
  • ying1989920
  • ying1989920
  • 2015年10月30日 23:23
  • 3448

mysql 多实例案例实战

MySQL多实例案例其实Mysql多实例就是在一个MySQL服务上面启动三个实例,相当于三个分离开来的数据库,至于为什么要做这个,你也可以选择分别安装三个MySQL,只是过于麻烦,多实例中只需要一个配...
  • wanglei_storage
  • wanglei_storage
  • 2015年10月21日 15:27
  • 4646

hibernate3+mysql简单学习实例.rar

  • 2010年11月15日 14:31
  • 4.03MB
  • 下载

MySQL详细的学习资料,附有各种实例证明

  • 2010年10月27日 21:39
  • 1.52MB
  • 下载

PHP+MYSQL新手学习实例代码(留言板)

  • 2012年04月14日 17:22
  • 71KB
  • 下载

mysql学习足迹之二【mysql启动多实例步骤讲解】

在前面一篇已经提到了mysql,因为这段时间工作需要,我也开始慢慢的学习掌握mysql一些知识, 由于没有基础在mysql启动多实例的问题上纠结了很久,总是得不到我想要的结果,经查一些资料和网站边学...
  • willability
  • willability
  • 2012年06月15日 15:35
  • 973

mysql单机多实例详细安装步骤

  • 2015年10月18日 09:23
  • 153KB
  • 下载

Mysql_多实例安装配置方法一

  • 2014年03月14日 09:08
  • 41KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql多实例学习
举报原因:
原因补充:

(最多只允许输入30个字)