zoukankan      html  css  js  c++  java
  • Mysql多实例实施文档

    1. 概述

    1.1 mysql多实例的原理

    mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程。这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务。这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件。在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源。

    2. mysql多实例的特点

    2.1 有效的利用服务器资源

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

    2.2 节约服务器资源

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

    2.3 出现资源互相抢占问题

    当某个实例服务并发很高或者有慢查询时,会消耗服务器更多的内存、CPU、磁盘IO等资源,这时就会导致服务器上的其它实例提供访问的质量下降,出现服务器资源互相抢占的现象。

    3. mysql5.6多实例部署方法

    3.1 mysql5.5多实例部署方法

    mysql5.5多实例部署方法一个是通过多个配置文件启动多个不同进程的方法,第二个是使用官方自带的mysqld_multi来实现。

    第一种方法我们可以把各个实例的配置文件分开,管理比较方便。第二种方法就是把多个实例都放到一个配置文件中,这个管理不是很方便。所以在此我们选择第一种方法,而且以下实验我们全部是在此方法下进行的。

    3.2 mysql5.5的安装及配置

    要配置mysql5.5多实例,我们首先要安装mysql5.5,有关mysql5.5的安装可以查看《烂泥:mysql5.5数据库cmake源码编译安装》这篇文章。

    mysql5.5安装完毕后,我们不要启动mysql,因为此时mysql是单实例的。

    3.3 创建mysql多实例的数据目录

    现在我们来创建mysql5.5多实例的数据目录,在此我们创建两个mysql实例3306和3307。创建各自的数据目录,如下:

    [root@testdb2 data]# mkdir -p /data/{3306,3307}/data

    [root@testdb2 data]# tree -L 2 /data

    /data

    |-- 3306

    | `-- data

    |-- 3307

    | `-- data

    `-- mysql

    |-- auto.cnf

    |-- db2

    |-- db3

    |-- db_gbk

    |-- ib_logfile0

    |-- ib_logfile1

    |-- ibdata1

    |-- master.info

    |-- mysql

    |-- performance_schema

    |-- relay-log.info

    |-- relaylog

    |-- test

    `-- testdb2.err

    12 directories, 7 files

    3.4 修改mysql5.5多实例my.cnf文件

    实例3306和3307的数据目录创建完毕后,我们来配置实例3306与3307的my.cnf配置文件。

    复制mysql5.5安装目录support-files下的my-medium.cnf为my.cnf,并把内容修改为下。现在以3306这个实例为例,如下:

    以上是实例3306的my.cnf配置文件,现在我们来配置实例3307的my.cnf。实例3307的配置文件my.cnf我们直接复制实例3306的my.cnf文件,然后通过sed命令把该文件中的3306修改为3307即可。如下:

    --配置文件

    [client]

    port = 3306

    socket = /data/3306/mysql.sock

    [mysqld]

    port = 3306

    socket = /data/3306/mysql.sock

    basedir = /usr/local/mysql

    datadir = /data/3306/data

    skip-external-locking

    key_buffer_size = 16M

    max_allowed_packet = 1M

    table_open_cache = 64

    sort_buffer_size = 512K

    net_buffer_length = 8K

    read_buffer_size = 256K

    read_rnd_buffer_size = 512K

    myisam_sort_buffer_size = 8M

    skip-name-resolve

    log-bin=mysql-bin

    binlog_format=mixed

    max_binlog_size = 500M

    server-id = 1

    [mysqld_safe]

    log-error=/data/3306/ilanni.err

    pid-file=/data/3306/ilanni.pid

    [mysqldump]

    quick

    max_allowed_packet = 16M

    [mysql]

    no-auto-rehash

    [myisamchk]

    key_buffer_size = 20M

    sort_buffer_size = 20M

    read_buffer = 2M

    write_buffer = 2M

    [mysqlhotcopy]

    interactive-timeout

    cp /data/3306/my.cnf /data/3307/my.cnf

    sed -i 's/3306/3307/g' /data/3307/my.cnf

    或者

    sed -e 's/3306/3307/g' /data/3306/my.cnf >/data/3307/my.cnf

    备注:修改 server-id

    3.5 初始化mysql多实例

    先授权

    [root@testdb2 data]# chown -R mysql:mysql /data/3306

    [root@testdb2 data]#

    [root@testdb2 data]#

    [root@testdb2 data]# chown -R mysql:mysql /data/3307

    实例3306和3307的my.cnf配置文件修改完毕后,我们需要来初始化这两个实例,使用mysql_install_db命令。如下:

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

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

    注意mysql5.5的mysql_install_db在mysql5.5的/usr/local/mysql/scripts/mysql_install_db目录下。

    [root@testdb2 3307]# tree -L 3 /data

    /data

    |-- 3306

    | |-- data

    | | |-- ib_logfile0

    | | |-- ib_logfile1

    | | |-- ibdata1

    | | |-- mysql

    | | |-- performance_schema

    | | `-- test

    | `-- my.cnf

    |-- 3307

    | |-- data

    | | |-- ib_logfile0

    | | |-- ib_logfile1

    | | |-- ibdata1

    | | |-- mysql

    | | |-- performance_schema

    | | `-- test

    | `-- my.cnf

    3.6 修改mysql实例的数据库目录权限

    mysql实例初始化完毕后,我们现在把实例3306和实例3307的数据目录权限重新赋予给mysql用户。如下:

    chown -R mysql:mysql /data/3306

    chown -R mysql:mysql /data/3307

    这个地方建议一定要操作一遍,否则在启动mysql实例时,会提示出错。导致mysql实例无法启动。

    3.7 启动mysql5.5多实例

    我们现在来启动实例。使用如下命令:

    /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &

    /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &

    [root@testdb2 data]# ps -ef |grep mysql

    root 6950 6502 0 19:07 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

    mysql 7261 6950 0 19:07 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/ilanni.err --pid-file=/data/3306/ilanni.pid --socket=/data/3306/mysql.sock --port=3306

    root 7302 6502 0 19:09 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf

    mysql 7613 7302 0 19:09 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3307/ilanni.err --pid-file=/data/3307/ilanni.pid --socket=/data/3307/mysql.sock --port=3307

    root 7645 6502 0 19:09 pts/2 00:00:00 grep mysql

    其实单实例mysql的启动也是通过mysqld_safe命令来启动。它默认会加载/etc/my.cnf文件。

    3.8 登录mysql5.5多实例

    登录多实例数据库时,我们需要加入该实例的socket文件,才能正常登录。现在以3306实例为例。

    本地登录3306实例,如下:

    mysql -uroot -p -S /data/3306/mysql.sock

    [root@testdb2 data]# mysql -uroot -p -S /data/3306/mysql.sock

    Enter password:

    Welcome to the MySQL monitor. Commands end with ; or g.

    Your MySQL connection id is 1

    Server version: 5.6.28-log Source distribution

    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql>

    mysql> select user,host,password from mysql.user;

    +------+-----------+----------+

    | user | host | password |

    +------+-----------+----------+

    | root | localhost | |

    | root | testdb2 | |

    | root | 127.0.0.1 | |

    | root | ::1 | |

    | | localhost | |

    | | testdb2 | |

    +------+-----------+----------+

    6 rows in set (0.00 sec)

    mysql>

    3307数据库

    [root@testdb2 data]# mysql -uroot -p -S /data/3307/mysql.sock

    Enter password:

    Welcome to the MySQL monitor. Commands end with ; or g.

    Your MySQL connection id is 1

    Server version: 5.6.28-log Source distribution

    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql>

    现在我们远程登录实例3306,并查看刚刚新建的数据库。如下:

    mysql -h192.168.1.213 -uroot -p -S /data/3306/mysql.sock

    [root@testdb2 data]# mysql -uroot -p -h localhost -S /data/3306/mysql.sock

    Enter password:

    Welcome to the MySQL monitor. Commands end with ; or g.

    Your MySQL connection id is 2

    Server version: 5.6.28-log Source distribution

    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql>

    或者:mysql -h192.168.1.213 -uroot -p –P 3306

    3.9 修改mysql5.5多实例root密码

    修改实例3306的root密码,使用mysqladmin命令。如下:mysqladmin -uroot -p password 123456 -S /data/3306/mysql.sock

    多实例关闭数据库

    [root@testdb2 data]# mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown

    Enter password:

    160427 19:19:29 mysqld_safe mysqld from pid file /data/3306/ilanni.pid ended

    [1]- Done /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

    [root@testdb2 data]# netstat -luntp |grep 33

    tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 7613/mysqld

    [root@testdb2 data]# mysqladmin -uroot -p -S /data/3307/mysql.sock shutdown

    Enter password:

    160427 19:21:26 mysqld_safe mysqld from pid file /data/3307/ilanni.pid ended

    [2]+ Done /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf

    3.10 总结

    --配置root用户环境变量

    PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

    export PATH

    unset USERNAME

    export LANG=en

    多实例数据库启动

    [root@testdb2 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf &

    [root@testdb2 ~]# mysqld_safe --defaults-file=/data/3307/my.cnf &

    [root@testdb2 ~]# mysqld_safe --defaults-file=/data/3308/my.cnf &

    [root@testdb2 ~]# ps -ef |grep mysql

    root 8760 6502 0 19:41 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

    mysql 9069 8760 0 19:41 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/ilanni.err --pid-file=/data/3306/ilanni.pid --socket=/data/3306/mysql.sock --port=3306

    root 9095 6502 0 19:42 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf

    mysql 9404 9095 0 19:42 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3307/ilanni.err --pid-file=/data/3307/ilanni.pid --socket=/data/3307/mysql.sock --port=3307

    root 9428 6502 0 19:42 pts/2 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf

    mysql 9737 9428 0 19:42 pts/2 00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/usr/local/mysql --datadir=/data/3308/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3308/ilanni.err --pid-file=/data/3308/ilanni.pid --socket=/data/3308/mysql.sock --port=3308

    root 9772 6502 0 19:43 pts/2 00:00:00 grep mysql

    [root@testdb2 ~]# netstat -lntup |grep 330

    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9069/mysqld

    tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 9404/mysqld

    tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 9737/mysqld

    多实例登录数据库

    [root@testdb2 data]# mysql -uroot -p -S /data/3306/mysql.sock

    [root@testdb2 data]# mysql -uroot -p -S /data/3307/mysql.sock

    多实例关闭数据库

    [root@testdb2 ~]# mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown

    [root@testdb2 ~]# mysqladmin -uroot -p -S /data/3307/mysql.sock shutdown

    [root@testdb2 ~]# mysqladmin -uroot -p -S /data/3308/mysql.sock shutdown

    [root@testdb2 ~]# ss -lnutp |grep 330

  • 相关阅读:
    选择结构(一)
    媒体元素与表单
    变量、数据类型和运算符
    通俗易懂--快速入门Vue--4
    通俗易懂--快速入门Vue--2
    通俗易懂--快速入门Vue--3
    通俗易懂--快速入门Vue--1
    Vue之v-model
    Vue基础篇--5列表渲染v-for
    Vue基础篇--7表单输入绑定input
  • 原文地址:https://www.cnblogs.com/rencheng/p/6601994.html
Copyright © 2011-2022 走看看