zoukankan      html  css  js  c++  java
  • Mysql 数据库单机多实例部署手记

        最近的研发机器需要部署多个环境,包括数据库。为了管理方便考虑将mysql数据库进行隔离,即采用单机多实例部署的方式。
    找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单实例运行,再进行一系列的配置调优..

    多实例的运行机制

        通过mysqld_multi启动多个mysqld实例进程,每个实例拥有独立的配置、监听端口、数据库文件、临时文件(日志、socket)等

    实现步骤

    1  初始化数据目录

    mysql_install_db --datadir=/web/mysql/prd/data --user=mysql
    mysql_install_db --datadir=/web/mysql/dev/data --user=mysql
     
    //当然数据目录也可以拷贝已有的

    2 配置多实例文件

    multi.cnf:
    #multi server
    [mysqld_multi]
    mysqld = /home/root/local/mysql/bin/mysqld_safe
    mysqladmin = /home/root/local/mysql/bin/mysqladmin
     
    #mysqld_multi log
    log = /web/mysql/multi.log
    #用户名密码,用以mysqld_multi操作时透传给mysqladmin(初始化时一般为匿名访问,注释掉即可)
    #user=root
    #password=
     
    #dev server
    [mysqld3306]
    user = mysql
    port = 3306
    socket = /web/mysql/dev/var/mysql.sock
    pid-file = /web/mysql/dev/var/mysqld.pid
    log-error = /web/mysql/dev/var/mysqld.log
    datadir = /web/mysql/dev/data
    max_connections = 200
    default-storage-engine = innodb
    character_set_server = utf8mb4
     
    #prd server
    [mysqld3307]
    user = mysql
    port = 3811
    socket = /web/mysql/prd/var/mysql.sock
    pid-file = /web/mysql/prd/var/mysqld.pid
    log-error = /web/mysql/prd/var/mysqld.log
    datadir = /web/mysql/prd/data
    max_connections = 1000
    default-storage-engine = innodb
    character_set_server = utf8mb4
    

      

     

    3 启动多实例

    mysqld_multi --defaults-extra-file=multi.cnf start
     

    4  管理多实例

    检查运行情况
    mysqld_multi --defaults-extra-file=multi.cnf report
     
    当然也可以通过网络端口检查:
    netstat -ntlp tcp
    tcp 0 0 :::3306 ::: * LISTEN 3919/mysqld
    tcp 0 0 :::3307 ::: * LISTEN 15027/mysqld
     
    停止多实例:
    mysqld_multi --defaults-extra-file=multi.cnf stop
     
    修改密码(针对某个实例):
    mysqladmin -uroot -S /web/mysql/prd/var/mysql.sock password 123456
     
    连接某个实例:
    mysql -uroot -S /web/mysql/prd/var/mysql.sock -p
     

    常见问题

        mysqld_multi执行之后无法启动实例,执行report发现实例没有运行
        原因:mysql实例目录缺少读写权限,将多实例的数据目录设置为mysql:mysql的用户组,并支持读写权限;
        
            
        启动实例之后无法停止,mysqld_multi stop不生效
        原因: mysqld实例的数据库管理员密码与mysqld_multi透传的管理员密码不一致(见multi.conf),通过修改密码可解决。
     
     

    TIPS

        msyqld_multi命令仅仅对配置文件做语法检查,排查问题时需结合multi.log(见配置文件),以及具体实例的错误日志进行;
        实例标号必须为整数,如msyqld3307中3307必须为数字标号;
  • 相关阅读:
    30岁的程序猿坐的太久,也要用一下脑子
    HIPO图
    CMake入门(二)
    hdu1711 Number Sequence
    EF架构~在ef中支持IQueryable级别的Contains被翻译成了Exists,性能可以接受!
    JS框架~Angularjs
    将不确定变为确定~transactionscope何时提升为分布式事务?(sql2005数据库解决提升到MSDTC的办法)
    SignalR实现服务器与客户端的实时通信
    基础才是重中之重~LazyInitializer.EnsureInitialized对属性实现化的性能优化
    [置顶] 电视机顶盒搜台原理和方法简析
  • 原文地址:https://www.cnblogs.com/littleatp/p/4793018.html
Copyright © 2011-2022 走看看