MySQL多实例





MySQL多实例


MySQL多实例

mysql

1.1 什么是MySQL多实例?

  简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306/3307)同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。
  这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,他们根据配置文件对应设定值,获得服务器响应数量的资源。
  
比喻图:
image_1b648ncbo1v4e1g1osvo7v04h89.png-81.9kB

1.2 MySQL多实例的作用与问题

■ 有效利用服务器资源
当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离
■ 节约服务器资源
当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了

  MySQL多实例有它的好处,但也有弊端,比如,会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。

1.3 MySQL多实例的生产场景应用

1、资金紧张性公司的选择
资金紧张,公司业务访问量又不大,但又希望不同的业务的数据库服务各自尽量独立
2、并发访问不是特别大的业务
当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这就适合多实例的使用
3、门户网站应用MySQL多实例场景
配置硬件好的服务器,可以节省IDC机柜空间,跑多实例也不会减少硬件资源不慢的浪费
一般是从库多实例,例如:某部门使用IBM服务器为48核CPU,内存96GB、一台服务器跑3~4个实例:此外,sina网也是用的多实例,内存48GB左右

说明: sina网的数据库单机1~4个数据库多实例的居多。其他又数1~2个的最多,因为大业务占用的机器比较多。服务器是DELL R510的居多,CPU是E5210,48GB内存,硬盘12*300G SAS,做RAID10,此外门户网站的服务器配置参考。

1.4 安装步骤

■ 安装依赖,下载软件包

  1. yum -y install ncurses-devel libaio-deve #安装依赖包
  2. yum -y install cmake #编译MySQL需要的软件
  3. useradd -s /sbin/nologin -M mysql #创建用户
  4. mkdir /home/oldboy/tools #规范软件包安装路径
  5. cd /home/oldboy/tools
  6. wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.49.tar.gz
  7. tar xf mysql-5.5.49.tar.gz #解压MySQL
  8. cd mysql-5.5.49

■ 编译MySQL源码包

编译参数

  1. cmake -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
  2. -DMYSQL_DATADIR=/application/mysql-5.5.32/data \
  3. -DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
  4. -DDEFAULT_CHARSET=utf8 \
  5. -DDEFAULT_COLLATION=utf8_general_ci \
  6. -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
  7. -DENABLED_LOOCAL_INFILE=ON \
  8. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  9. -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  10. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  11. -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
  12. -DWITHOUT_PARRTITION_STORAGE_ENGINE=1 \
  13. -DWITH_FAST_MUTEXES=1 \
  14. -DWITH_ZLIB=bundled \
  15. -DENABLED_LOCAL_INFILE=1 \
  16. -DWITH_READLINE=1 \
  17. -DWITH_EMBEDDED_SERVER=1\
  18. -DWITH_DEBUG=0

■ 此步是生成Makefile文件的步骤接下来进行安装

  1. make && make install
  2. ln -s /application/mysql-5.5.49 /application/mysql #制作软连接
  3. mkdir -p /data/{3306,3307}/data #创建多实例目录

这里的data安装使用下载 下载链接:http://pan.baidu.com/s/1pKZ4Li7

  1. [root@db01 /]# find /data -type f -name "mysql"|xargs chmod +x
  2. [root@db01 /]# find /data -type f -name "mysql"|xargs ls -l
  3. -rwxr-xr-x 1 root root 1307 Jul 152013 /data/3306/mysql
  4. -rwxr-xr-x 1 root root 1307 Jul 212013 /data/3307/mysql
  5. [root@db01 /]# chown -R mysql.mysql /data/
  6. [root@db01 /]# cd /application/mysql/scripts/
  7. [root@db01 scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql
  8. [root@db01 scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql

■ MySQL多实例配置及启动

启动MySQL启动方式和原来不同

  1. [root@db02 scripts]# /data/3306/mysql start
  2. Starting MySQL...
  3. [root@db02 scripts]# /data/3307/mysql start
  4. Starting MySQL...

■ 启动完成进行检查

  1. [root@db02 scripts]# netstat -lntup|grep 330
  2. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 14480/mysqld
  3. tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 15198/mysqld
  4. cp /application/mysql/bin/* /usr/local/sbin/
  5. 登录的时候需要指定sock
  6. mysql -uroot -S /data/3306/mysql.sock
  7. mysql -uroot -S /data/3307/mysql.sock

■ 设置开机启动

  1. echo "mysql multi instances" >>/etc/rc.local
  2. echo "/data/3306/mysql start" >>/etc/rc.local
  3. echo "/data/3307/mysql start" >>/etc/rc.local

下面我们自己添加一个多实例

添加多实例3308

  1. [root@db02 data]# mkdir /data/3308/data -p
  2. [root@db02 data]# \cp /data/3306/my.cnf /data/3308
  3. [root@db02 data]# \cp /data/3306/mysql /data/3308
  4. [root@db02 3308]# sed -i 's/3306/3308/g' my.cnf mysql
  5. [root@db02 3308]# sed -i 's/server-id = 1/server-id = 8/g' /data/3308/my.cnf
  6. [root@db02 3306]# chown -R mysql.mysql ../3308/

授权

  1. [root@db02 3306]# chmod 700 /data/3308/mysql
  2. [root@db02 3308]# cd /application/mysql/scripts/
  3. [root@db02 scripts]#./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308/data/ --user=mysql
  4. [root@db02 3308]# chmod +x /data/3308/mysq
  5. [root@db02 scripts]# /data/3308/mysql start
  6. Starting MySQL...
  7. [root@db02 scripts]# mysql -S /data/3308/mysql.sock

MySQL远程连接

  1. mysql -uroot -poldboy -h 10.0.0.7 -P 端口号 -P 为端口参数

因为脚本里面设置的密码是abcdocker 所以如果我们不设置将无法停止MySQL

  1. [root@db02 scripts]# mysqladmin password abcdocker -S /data/3306/mysql.sock
  2. [root@db02 scripts]# mysqladmin password abcdocker -S /data/3307/mysql.sock
  3. [root@db02 scripts]# mysqladmin password abcdocker -S /data/3308/mysql.sock
  4. [root@db02 scripts]# mysql -uroot -pabcdocker -S /data/3306/mysql.sock

常见错误问题:

错误问题:
■ 对主机名做解析
■ tmp目录权限1777
■ 如果启动MySQL多实例没有查到端口就稍等一会
■ 日志.err结尾的日志进行排错


历史上的今天:

  1. 2017:  Linux 通过host.allow限制特定IP来访(0)
新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: