MySQL数据库基础(3)多实例应用实战

1、什么是MySQL多实例?html

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

    共用一套MySQL安装程序sql

    使用不一样(也能够相同)的my.cnf配置文件、启动程序、数据文件数据库

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

 

2、多实例的做用与问题安全

    一、有效利用服务器资源bash

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

    二、节约服务器资源并发

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

    三、资源互相抢占问题

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

 

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

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

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

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

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

 

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

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

    

 

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

 

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

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

 

5、安装多实例MySQL数据库

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

    二、建立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个实例

    三、建立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    #可代替上面操做

 

    四、配置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

 

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

        1)配置全局路径意义

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

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

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

        

    六、初始化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 省略。。。

    七、启动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

     八、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

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

 

  ## 在MySQL里面   命令前面加 system  能够切换 数据库

 6、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

 

7、如何再添加一个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 端口

相关文章
相关标签/搜索