MySQL 多实例详解

目录

一、基本概念

1、MySQL多实例

       就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件。在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得相关硬件资源的多少。

2、应用场景

1.采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移

2. 为规避mysql对SMP架构不支持的缺陷,使用多实例绑定处理器的办法,把不同的数据库分配到不同的实例上提供数据服务

3.  一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署

4.  已经为双主复制的mysql数据库服务器架构,想部分重要业务的数据多一份异地机房的热备份,而mysql复制暂不支持多主的复制模式,且不给用户提供服务,为有效控制成本,会考虑异地机房部署一台性能超好的物理服务器,甚至外加磁盘柜的方式,为此也会部署多实例;

5.  传统游戏行业的MMO/MMORPG,以及Web Game,每一个服都对应一个数据库,而可能要做很多数据查询和数据订正的工作,为减少维护而出错的概率,也可能采用多实例部署的方式,按区的概念分配数据库;

 3、作用与问题

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

     2、资源互相争抢问题,比如 内存 ,cpu 需要开启 numa,并把 mysql 绑定到固定的核心上,网卡的中断请求,资源争用,最重要的是磁盘 IO

 

MySQL多实例配置方法

       1、单一配置文件

       2、多配置文件。

二、实战步骤:

    1、同步时间

    2、准备mysql依赖包

    3、环境准备

            3.1添加mysql用户

            3.2编译安装mysql

       4、安装MySQL多实例

    5、准备配置文件

    6、启动MySQL

    7、登录mysql与一些安全措施

    8、关闭MySQL

    9,、提供简易管理脚本

    10、为mysql的root用户创建密码

    11、附,多配置文件安装mysql多实例,这里增加mysql 的3309端口

    12、总结

1、同步时间

yum install epel*
ntp 202.120.2.101
yum install -y ntp
ntpdate 202.120.2.101
hwclock -w

2、准备mysql依赖包

yum install -y autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* openssl*
yum install cmake -y

3、环境准备

3.1添加mysql用户

groupadd mysql
useradd -g mysql mysql 
mkdir -pv /data/{3306,3307,3308}/data
chown -R mysql.mysql /data/
cd /usr/local/src/

3.2编译安装mysql

tar -xf mysql-5.5.45.tar.gz
cd mysql-5.5.45
chown mysql.mysql -R .
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
gmake
make install

4、安装MySQL多实例

cd /usr/local/mysql/
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/

5、准备配置文件

mysqld_multi --example > /data/multi.cnf   #提供多配置文件模板
vim /data/multi.cnf   #修改模板,这里比较简易
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = root 
 
#这个用户应该有关机权限,然后没有其他的权限。建议创建一个通用的,multi_admin用户控制其它的MySQL用户,这里有个例子
#GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password'
 
[mysqld1]
socket     = /tmp/mysql.sock1
port       = 3306
pid-file   = /data/3306/mysql.pid
datadir    = /data/3306/data
 
[mysqld2]
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /data/3307/mysql.pid
datadir    = /data/3307/data
#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   = /data/3308/mysql.pid
datadir    = /data/3308/data
#language   = /usr/local/mysql/share/mysql/swedish
#user       = unix_user2

以上是简易的配置文件。这个配置文件只能让MySQL启动起来。

6、启动MySQL

mysqld_multi --defaults-file=/data/multi.cnf start 1,2,3
ss -tnl   #查看监听端口
LISTEN     0      50                        *:3306                     *:*    
LISTEN     0      50                        *:3307                     *:*    
LISTEN     0      50                        *:3308                     *:*

7、登录mysql与一些安全措施

mysql -S /tmp/mysql.sock1       #指定socket登录
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)
 
mysql> drop database test;
Query OK, 0 rows affected (0.04 sec)
 
mysql> select User,Host from mysql.user;
+------+-----------+
| User | Host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | localhost |
| root | localhost |
|      | node1     |
| root | node1     |
+------+-----------+
6 rows in set (0.01 sec)
 
mysql> delete from mysql.user where User='';
Query OK, 2 rows affected (0.00 sec)
 
mysql> delete from mysql.user where Host='::1';
Query OK, 1 row affected (0.00 sec)
 
mysql> delete from mysql.user where Host='node1';
Query OK, 1 row affected (0.00 sec)

其余的操作类似,就不在演示

8、关闭MySQL

mysqladmin -S /tmp/mysql.sock1 shutdown  建议使用
musqld_multi --defaults-file stop [#,#]
killall mysqld  不建议使用

9,、提供简易管理脚本

#!/bin/bash
#
basedir=/usr/local/mysql
bindir=/usr/local/mysql/bin
conf=/data/multi.cnf
export PATH=$bindir:/$PATH
if test -x $bindir/mysqld_multi 
then  
  mysqld_multi="$bindir/mysqld_multi";  
else  
  echo "Can't execute $bindir/mysqld_multi from dir $basedir";  
  exit;  
fi
case "$1" in 
    'start' )  
        "$mysqld_multi" --defaults-extra-file=$conf start $2  
        ;;  
    'stop' )  
        "$mysqld_multi" --defaults-extra-file=$conf stop $2  
        ;;  
    'report' )  
        "$mysqld_multi" --defaults-extra-file=$conf report $2  
        ;;  
    'restart' )  
        "$mysqld_multi" --defaults-extra-file=$conf stop $2  
        "$mysqld_multi" --defaults-extra-file=$conf start $2  
        ;;  
    *)  
        echo "Usage: $0 {start|stop|report|restart}" >&2  
        ;;  
esac

10、为mysqlroot用户创建密码

mysqladmin -uroot -S /tmp/mysql.sock2 password "123456"   #指定socket文件位置即可

其余的操作一样

11、附,多配置文件安装mysql多实例,这里增加mysql 3309端口

mkdir -pv /data/3309/data                  
chown mysql.mysql -R 3309/
cd /usr/local/mysql
scripts/mysql_install_db --datadir=/data/3309/data/ --user=mysql --basedir=/usr/local/mysql/
cp support-files/my-small.cnf /data/3309/my.cnf
vim /data/3309/my.cnf
[client]
port        = 3309                 #这里也需要注意下吧
socket            = /tmp/mysql.sock4
 
 
[mysqld]
port        = 3309             #注意端口
socket            = /tmp/mysql.sock4           #注意socket
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
datadir=/data/3309/data        #注意datadir
server-id  = 1
 
[mysqldump]
quick
max_allowed_packet = 16M
 mysqld_safe --defaults-file=/data/3309/my.cnf 2&1> > /dev/null    #启动mysqld
ss -tnl | grep 330                #查看端口
LISTEN     0      50                        *:3306                     *:*    
LISTEN     0      50                        *:3307                     *:*    
LISTEN     0      50                        *:3308                     *:*    
LISTEN     0      50                        *:3309                     *:*

 其余启动方法与关闭方法类似

12、总结:

       1、通过这次mysql多实例安装,我们已经可以根据自己的喜好决定是通过多配置文件安装mysql多实例,还是但配置单文件安装。

       2、过程比较简单,也没有什么特别高明的技巧,但是由小见大,以后配置文件可以在完善完善。

       3、就是下面还会用心的写一系列的mysql博客,希望高手指点,不胜感激

参考链接:http://freeloda.blog.51cto.com/2033581/1349312

原创文章,作者:艾贺,如若转载,请注明出处:http://www.178linux.com/8335

(0)
上一篇 2015-09-22 13:14
下一篇 2015-09-23 19:59

相关推荐

  • 马哥教育网络班22期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;       [root@localhost ~]#…

    Linux干货 2016-10-09
  • sudo——让普通用户更灵活

    sudo命令 1、sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo ,会提示联系管理员 2、sudo可以提供日志,记录每个用户使用sudo 操作 3、sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机 4、sudo 使用时间戳文件来完成类似“检票”的 系统,默认存活期为5 分钟的 “入场券” …

    Linux干货 2016-09-25
  • N22-第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 单词间跳转 w:下一个单词的词首 e:当前或后一个单词的词尾 b:当前或前一个单词的词首 行首行尾跳转: ^:跳转至行首的第一个非空白字符 0:跳转至行首 $: 跳转至行尾 句间跳转: ) ( 段落跳转: } { 字符编辑 x:删除光标所在处的字符 #x:删除光标所在处起始的#个字符 xp:交换光标所在处的字符与…

    Linux干货 2016-09-26
  • N28-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
    2、取出最后登录到当前系统的用户的相关信息。
    3、取出当前系统上被用户当作其默认shell的最多的那个shell。
    4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
    5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
    6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
    7、显示/var目录下一级子目录或文件的总个数。
    8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
    9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
    10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
    (1)、创建组distro,其GID为2016;
    (2)、创建用户mandriva, 其ID号为1005;基本组为distro;
    (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
    (4)、给用户mageia添加密码,密码为mageedu;
    (5)、删除mandriva,但保留其家目录;
    (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
    (7)、修改slackware的默认shell为/bin/tcsh;
    (8)、为用户slackware新增附加组admins;

    2017-12-17
  • Linux 进程及作业管理

    Linux 进程及作业管理 概述:      我们在实际的运维工作中经常要对服务器做各种监控,以了解其相关状态,比如,CPU利用率,磁盘空间利用率,等等,这就需要我们了解相关的数据并学会使用各种工具来分析数据。本章就将总结Linux系统中进程管理和作业管理的相关命令、参数和工具,包括:进程的相关定义、分类、状态以及进程查看和管理…

    Linux干货 2016-09-11
  • 压缩、解压缩和归档工具

    1  compress和uncompress 用法:     compress [-dfvcVr] [-b maxbits] [file…] 选项:     -d   解压缩     -c   结果…

    Linux干货 2016-08-18

评论列表(1条)

  • Vicky
    Vicky 2015-09-23 20:03

    继续用心写博客~