• mysql多实例


     

    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节,“使用选项文件”。

  • 相关阅读:
    关于下下载typora的相关说明
    Vue项目vscode 安装eslint插件的方法(代码自动修复)
    [0].Net开发者社区--您好大的官威啊!
    关于hadoop安装后无法访问web界面查看查看 NameNode 和 Datanode 信息
    C#(winform)记录阻止关闭页面方法
    Android开发:记录Cannot resolve symbol'R'问题解决记录
    C#Winform开发杂项记录
    C#Winform 使用NPOI导入、导出Excel
    C#记录一些用到的比对方法
    C#(Winform开发)Excel导出
  • 原文地址:https://www.cnblogs.com/helloyb/p/2870120.html
Copyright © 2020-2023  润新知