zoukankan      html  css  js  c++  java
  • MySQL数据库基础(3)多实例应用实战

    一、什么是MySQL多实例?

        简单的说,就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。

        共用一套MySQL安装程序

        使用不同(也可以相同)的my.cnf配置文件、启动程序、数据文件

        作个比喻,MySQL多实例相当于房子的多个卧室一样,每个势力可以看做一个卧室,整个服务器就是一套房子。逻辑上是独立的,但是互相会有影响。

    二、多实例的作用与问题

        1、有效利用服务器资源

            当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

        2、节约服务器资源

            当公司资金紧张,但是数据库又需要各自尽量独立提供服务,而且,需要主从同步等技术时,多实例就再好不过了。

        3、资源互相抢占问题

            当某个服务实例并发很高或者有慢查询时,整个实例会消耗整个更多的内存、CPU、磁盘IO资源,导致服务器上的其他的实例提供服务的质量下降。这就相当于大家住在一个房子的不同卧室一样,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会被长期占用,其它人就要等待一样的道理。

    三、MySQL多实例生产应用场景

        1、资金紧张型公司的选择

        2、并发访问不是特别大的业务

        3、门户网站应用MySQL多实例场景

        主要是俩点:节约资金,充分利用资源

    四、MySQL多实例常见配置方案

        1、多配置文件部署方案:配置多个配置文件及多个启动程序

        

        提示:配置文件,启动程序,数据文件分别是独立的

        2、单一配置文件部署方案

         mysqld_multi  (官方推荐) 耦合性太高

    五、安装多实例MySQL数据库

        1、MySQL安装详细请看https://www.cnblogs.com/cnxy168/p/11540198.html

        2、创建MySQL多实例的数据文件目录

            rm -f /etc/init.d/mysqld 

            [root@localhost ~]# mkdir -p /data/{3306,3307}/data
            [root@localhost ~]# tree /data
            /data        #总的多实例根目录
            ├── 3306      #3306实例的目录
            │   └── data    #3306手里的数据文件目录
            └── 3307      #3307实例的目录
              └── data    #3307实例的数据文件目录

            4 directories, 0 files

            生产硬件配置:MEM 32g 双cpu 8核  磁盘6*600g sas  15k。能跑2-3个实例

        3、创建MySQL多实例的数据配置文件

    rm -f /etc/init.d/mysqld 
    mkdir -p /data/{3306,3307}/data
    
    [root@localhost ~]# tree /data
    /data
    ├── 3306
    │   └── data
    └── 3307
        └── data
    
    4 directories, 0 files
    
    [root@localhost ~]# cd /home/oldboy/tools/
    root@localhost tools]# unzip data.zip
    [root@localhost tools]# cp data/3306/my.cnf /data/3306
    [root@localhost tools]# cp data/3307/my.cnf /data/3307
    [root@localhost tools]# tree /data
    /data
    ├── 3306
    │   ├── data
    │   └── my.cnf
    └── 3307
        ├── data
        └── my.cnf
    
    4 directories, 2 files
    
    [root@localhost tools]# cp data/3306/mysql /data/3306
    [root@localhost tools]# cp data/3307/mysql /data/3307

     [root@localhost tools]# tree /data
      /data
      ├── 3306
      │   ├── data
      │   ├── my.cnf
      │   └── mysql
      └── 3307
          ├── data
          ├── my.cnf
          └── mysql           

      4 directories, 4 files     

    cp data.zip  /
    unzip -o data.zip    #可代替上面操作

     

        4、配置MySQL多实例的文件权限

             授权mysql用户和组管理整个多实例目录/data

    [root@localhost tools]# chown -R mysql.mysql /data
    [root@localhost tools]# find /data/ -type f -name "mysql"
    /data/3306/mysql
    /data/3307/mysql
    [root@localhost tools]# find /data/ -type f -name "mysql"|xargs ls -l
    -rw-r--r--. 1 mysql mysql 1307 9月  18 14:12 /data/3306/mysql
    -rw-r--r--. 1 mysql mysql 1307 9月  18 14:12 /data/3307/mysql
    [root@localhost tools]# find /data/ -type f -name "mysql"|xargs chmod +x
    [root@localhost tools]# find /data/ -type f -name "mysql"|xargs ls -l
    -rwxr-xr-x. 1 mysql mysql 1307 9月  18 14:12 /data/3306/mysql
    -rwxr-xr-x. 1 mysql mysql 1307 9月  18 14:12 /data/3307/mysql

         5、配置MySQL命令全局使用路径

            1)配置全局路径意义

                如果不配置MySQL命令的全局路径,就无法直接敲mysql等命令,也就是只能/usr/local/mysql/bin/mysql这样敲命令

            2)[root@localhost tools]# tail -1 /etc/profile

              export PATH=/application/mysql/bin:$PATH

            

        6、初始化MySQL多实例的数据库文件

            1)初始化命令为

              mysql5.5.32初始化命令:

    [root@localhost tools]# cd /application/mysql/scripts/
    [root@localhost scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
    [root@localhost scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

            2)为什么要初始化数据库?

              a.初始化的主要目的就是创建基础的数据库文件,例如:生成mysql库表等。

              b.初始化后查看对应实例数据目录,可以看到如下文件。

    [root@localhost scripts]# tree /data
    /data
    ├── 3306
    │   ├── data
    │   │   ├── mysql
    │   │   │   ├── columns_priv.frm
    │   │   │   ├── columns_priv.MYD
    │   │   │   ├── columns_priv.MYI
    │   │   │   ├── db.frm
    │   │   │   ├── db.MYD
    │   │   │   ├── db.MYI
    │   │   │   ├── event.frm
    │   │   │   ├── event.MYD
    │   │   │   ├── event.MYI
    │   │   │   ├── func.frm
    │   │   │   ├── func.MYD
    省略。。。

        7、启动MySQL多实例数据库

    [root@localhost scripts]# /data/3306/mysql start
    Starting MySQL...
    [root@localhost scripts]# /data/3307/mysql start
    Starting MySQL...
    [root@localhost scripts]# netstat -lntup|grep 330[6-7]
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      22823/mysqld        
    tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      24832/mysqld 

         8、MySQL故障排错多实例数据库

    [root@localhost 3306]# grep log-error my.cnf|tail -1
    log-error=/data/3306/mysql_oldboy3306.err
    [root@localhost 3306]# cat mysql_oldboy3306.err 
    190918 14:45:32 mysqld_safe Starting mysqld daemon with databases from /data/3306/data
    190918 14:45:32 [Note] Plugin 'FEDERATED' is disabled.
    190918 14:45:32 InnoDB: The InnoDB memory heap is disabled
    190918 14:45:32 InnoDB: Mutexes and rw_locks use GCC atomic builtins
    190918 14:45:32 InnoDB: Compressed tables use zlib 1.2.3
    190918 14:45:32 InnoDB: Initializing buffer pool, size = 32.0M
    190918 14:45:32 InnoDB: Completed initialization of buffer pool

         9、MySQL多实例数据库管理方法

      ## 在MySQL里面   命令前面加 system  可以切换 数据库

     六、MySQL安全配置

    [root@localhost 3306]# mysqladmin -u root -S /data/3306/mysql.sock password 'oldboy123'
    [root@localhost 3306]# mysqladmin -u root -S /data/3307/mysql.sock password 'oldboy123'
    [root@localhost 3306]# vim mysql
    [root@localhost 3306]# cd ..
    [root@localhost data]# vim 3307/my
    my.cnf                mysqld.pid            mysql.sock            
    mysql                 mysql_oldboy3307.err  
    [root@localhost data]# vim 3307/my
    my.cnf                mysqld.pid            mysql.sock            
    mysql                 mysql_oldboy3307.err  
    [root@localhost data]# vim 3307/mysql.sock 
    [root@localhost data]# ls
    3306  3307
    [root@localhost data]# cd 3307
    [root@localhost 3307]# vim mysql
    [root@localhost 3307]# find /data -type f -name "mysql" | -exec chmod 700 {} ;
    -bash: -exec: command not found
    [root@localhost 3307]# find /data -type f -name "mysql"  -exec chmod 700 {} ;
    [root@localhost 3307]# find /data -type f -name "mysql"  -exec chown root.root {} ;
    [root@localhost 3307]# find /data -type f -name "mysql"  -exec ls -l {} ;
    -rwx------. 1 root root 1310 9月  18 17:48 /data/3306/mysql
    -rwx------. 1 root root 1310 9月  18 17:48 /data/3307/mysql
    [root@localhost 3307]# ss -lntup|grep 330
    tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",26485,12))
    tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",27202,11))
    [root@localhost 3307]# pkill mysqld
    [root@localhost 3307]# ss -lntup|grep 330
    [root@localhost 3307]# /data/3306/mysql start
    Starting MySQL...
    [root@localhost 3307]# /data/3307/mysql start
    Starting MySQL...
    [root@localhost 3307]# ss -lntup|grep 330
    tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",28117,12))
    tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",28834,11))

     #在mysql脚本里面 修改数据库密码   把脚本修改为root权限

    数据库有密码登录数据库

    mysql -u用户  -p密码 -S /data/3306/mysql.sock

    七、如何再添加一个MySQL实例

    :g/A/s//B/g              #把符合A的内容全部替换为B
    :%s/A/B/g               #把符合A的内容全部替换为B
    :n1,n2s/A/B/gc        #n1,n2为数字,在第n1和n2间寻找A,用B替换

        增加一个MySQL实例的命令过程如下:

    [root@localhost ~]# mkdir /data/3308/data -p
    [root@localhost ~]# cp /data/3306/my.cnf /data/3308
    [root@localhost ~]# cp /data/3306/mysql /data/3308
    [root@localhost ~]# chown -R mysql.mysql /data/3308
    [root@localhost ~]# vim /data/3308/mysql 
    [root@localhost ~]# vim /data/3308/my.cnf     这两项用上面的替换命令把3306替换成3308
    [root@localhost scripts]#  ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308/data --user=mysql
    Installing MySQL system tables...
    OK
    Filling help tables...
    OK
    [root@localhost scripts]# /data/3308/mysql start
    Starting MySQL...
    [root@localhost scripts]# ss -lntup | grep 330
    tcp    LISTEN     0      128                    *:3308                  *:*      users:(("mysqld",410,12))
    [root@localhost scripts]# mysql -uroot  -S /data/3308/mysql.sock
    [root@localhost scripts]# mysqladmin -u root -S /data/3308/mysql.sock password 'oldboy123'
    [root@localhost scripts]# mysql -uroot -poldboy123 -S /data/3308/mysql.sock

    八 、小结

        远程连接:mysql -u用户  -p密码  -h 地址  -P 端口

        

  • 相关阅读:
    与你一起学习MS Project基础篇:Project基础应用
    【项目管理工具】Microsoft Office Project 介绍
    学习Microsoft Visio(3)
    学习Microsoft Visio(2)
    学习Microsoft Visio(1)
    为什么管理人员都喜欢用Visio画图
    用Visio画流程图
    使用VISIO绘制组织结构图的操作方法
    C#(99):HttpClient网络HTTP请求和相应
    中国的名优绿茶
  • 原文地址:https://www.cnblogs.com/cnxy168/p/11543088.html
Copyright © 2011-2022 走看看