• MySQL多实例


    1、什么是MySQL多实例

    随着目前大部分服务器资源充盈,我们当然也要勤俭持家了,所以MySQL多实例就是可以将多个MySQL服务运行在一台机器上(不限于版本),当然了这也跟合租一样,如果有一个服务有小脾气那整个服务器上的服务可能都要闹小脾气了,哈哈。

    2、配置MySQL多实例先决条件

    在配置MySQL多实例之前我希望已经理解了MySQL单实例的部署形式,因为这里不会教你怎么部署MySQL。

    统计信息如下:

    • MySQL的版本类型,以及BASEDIR;
    • 统计数据库的DATADIR;
    • 统计服务端口;

    有了上面的条件你就完全可以搞事情了,哈哈

    3、多实例的隔离

    多实例我们需要隔离的内容有:端口、DATADIR;当然在个别情况下你是可以隔离BASEDIR的。

    4、实战MySQL多实例

    第一步首先找一个当前最高版本的MySQL(你运行中的),获取里面的mysqld_multi.server这个就在MySQL的安装包里面的support-files目录下。

    为什么找一个当前运行的最新版本呢?因为兼容性更好

    第二步,我们就需要配置我们的服务了

    示例配置文件如下:

    # This is an example of a my.cnf file for mysqld_multi.
    # Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
    
    [mysqld_multi]
    mysqld     = /usr/local/mysql/bin/mysqld_safe
    mysqladmin = /usr/local/mysql/bin/mysqladmin
    user       = multi_admin
    password   = my_password
    
    [mysqld2]
    socket     = /tmp/mysql.sock2
    port       = 3307
    pid-file   = /usr/local/mysql/data2/hostname.pid2
    datadir    = /usr/local/mysql/data2
    language   = /usr/local/mysql/share/mysql/english
    user       = unix_user1
    
    [mysqld3]
    mysqld     = /path/to/mysqld_safe
    ledir      = /path/to/mysqld-binary/
    mysqladmin = /path/to/mysqladmin
    socket     = /tmp/mysql.sock3
    port       = 3308
    pid-file   = /usr/local/mysql/data3/hostname.pid3
    datadir    = /usr/local/mysql/data3
    language   = /usr/local/mysql/share/mysql/swedish
    user       = unix_user2
    
    [mysqld4]
    socket     = /tmp/mysql.sock4
    port       = 3309
    pid-file   = /usr/local/mysql/data4/hostname.pid4
    datadir    = /usr/local/mysql/data4
    language   = /usr/local/mysql/share/mysql/estonia
    user       = unix_user3
    
    [mysqld6]
    socket     = /tmp/mysql.sock6
    port       = 3311
    pid-file   = /usr/local/mysql/data6/hostname.pid6
    datadir    = /usr/local/mysql/data6
    language   = /usr/local/mysql/share/mysql/japanese
    user       = unix_user4
    

    大家根据自己配置加上即可了,多实例的原理呢也非常简单,通过参数运行mysqld_safe启动服务,通过mysqladmin发送shutdown来关闭服务器,所以呢这里需要提供一个具有shutdown权限的MySQL用户

    授权指令如下:

    GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password'
    

    查看支持的数据组

    /etc/init.d/mysqld_multi report
    

    mysqld_multi 是一个可以通过chkconfig管理的服务。

    启动服务的形式如下:

    /etc/init.d/mysqld_multi start ID
    /etc/init.d/mysqld_multi start
    

    后者是全部启动,前者指定配置文件里面的ID启动服务,mysqld3306 这里3306就是实力ID。

    停止服务也是如此,不过停止服务可能会有问题,我的MySQL5.7就不可以使用,原因是里面的组件my_print_defaults在解析密码时隐藏了,所以这里我们简单修改一下启动脚本。

    旧代码:

    my $com= join ' ', 'my_print_defaults', @defaults_options, $group;
    

    新代码:

    my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;
    

    my_print_defaults -s 的作用是明文显示密码,这样就可以了。

    5、小结

    多实例在同一台服务器上,有一台出现问题其他的也会有影响,另外密码存放在配置文件中不安全,可以在关闭时手工指定密码,或者给配置文件600的权限。

  • 相关阅读:
    logback使用
    数据库阿里连接池 配置
    expect.js
    shim和polyfill有什么区别
    console.js还有浏览器不支持?
    vue项目如何实现剪切板功能--vue-clipboard2
    跟我一起使用webpack给一个开源项目添加一个运行入口
    Axure之添加点击页面
    Axure之母版窗口
    【react】react-reading-track
  • 原文地址:https://www.cnblogs.com/evan-blog/p/10464981.html
Copyright © 2020-2023  润新知