MySQL多实例

mysql多实例,老妪能解就是在一台服务器上,mysql服务开启多少个不等的端口(如3306、3307,3308),运营五个劳务进度。这么些mysql 服务进度经过分歧的
socket来监听差异的数码端口,从而互不干涉的提供个其余劳务。

在平等台服务器上,mysql 多实例会去共用一套 mysql 应用程序,由此在铺排mysql的时候只需求配置三回mysql程序就能够,没有须要数次布局。然而,mysql多实例之间会独家行使不一致的
my.cnf
配置文件、运行程序和数据文件。在提供劳动地点,mysql多实例在逻辑上看起来是各自独立,互不干涉的,况且七个实例之间是基于安顿文件的设定值,来博取相关服务器的硬件财富。

www.yabovip4.com,多实例应用场景

  1. 当五个厂商事情访谈量不太大,又想细心花费,並且还希望区别工作的数据库服务能够各自尽量独立,提供服务能够互为不受影响。别的还亟需选择基本同步等本事来提供数据库备份或读写分离服务,以及方便中期业务量增大时,数据库架构的庞大和迁移。

  2. 信用合作社事情访谈量不是太大的时候,服务器的财富大旨都以过剩情形。此时就很吻合
    mysql 多实例的应用。如若对 SQL语句 优化做的相比较好,mysql 多实例
    是三个很值得去行使的技术。

  3. 测验境遇,公司中会须要数据库境况来测量试验职业,在单机上铺排多实例也能够节省花费

MySQL多实例落成格局

mysql 多实例常规来说,有二种方案得以兑现,那二种方案各有利弊,如下:

  • 听大人讲多安插文件通过运用多少个布局文件来运维分化的经过,以此来贯彻多实例。

亮点:逻辑轻便,配置简单

症结:管理起来不方便人民群众

  • 基于mysqld_multi通过法定自带的 mysqld_multi
    工具,使用单独陈设文件来贯彻多实例

优点: 便于聚焦管理管理

症结: 不便于针对各种实例配置进行定制

  • 趣事IM使用 MySQL
    实例管理器(MYSQLMANAGE哈弗),这些方法好像相比好不过也是有一些复杂

亚搏app官方网站,优点:便于聚集管理

症结:耦合度高。IM一挂,实例全挂

不便于针对每一个实例配置进行定制

本章内容选拔第一种情势来是落实,(个人偏侧于这种艺术),数据库选用mariadb来替代mysql,进度都无差别

系统与安装版本消息
操作系统:Centos6.9
数据库:mariadb-10.2.15.tar.gz
四个实例:3306,3307,3308

MySQL多实例安装

安装mysql

  • 设置重视包

yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake libevent-devel gnutls-devel libaio-devel openssl-devel ncurses-devel libxml2-devel 

创建mysql用户组

useradd -r mysql

创办实例数据库目录
各实例的数据库目录,配置文件目录,运营程序目录都寄存在单身的目录地方,结构如下:

[root@localhost ~]# mkdir -p /data/mysql/{3306,3307,3308}/{data,etc,log,socket,bin}
[root@localhost ~]# tree /data
/data
├── lost+found
└── mysql
    ├── 3306
    │   ├── bin
    │   ├── data
    │   ├── etc
    │   ├── log
    │   └── socket
    ├── 3307
    │   ├── bin
    │   ├── data
    │   ├── etc
    │   ├── log
    │   └── socket
    ├── 3308
    │   ├── bin
    │   ├── data
    │   ├── etc
    │   ├── log
    │   └── socket
    └── mysqld

解压安装源码包

[root@localhost ~]# tar zxvf mariadb-10.2.15
[root@localhost ~]# cd mariadb-10.2.15

#编译
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  -DCMAKE-USER=mysql  -DCMAKE-GROUP=mysql -DMYSQL_DATADIR=/data/mysql -DWITHOUT_TOKUDB=1

假诺施行cmake提示:CMake Error at
storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake:183
(message):
丰裕编写翻译参数:-DWITHOUT_简单理解就是在一台服务器上。TOKUDB=1

make  -j  4
make  install

安装成功后先不初始化,把安插文件,运营脚本文件都安顿实现后再实施开首化

复制配置文件到各实例的etc目录下

陈设文件在源码包解压目录下

[root@localhost support-files]# cp my-huge.cnf /data/mysql/3306/etc/my.cnf
[root@localhost support-files]# cp my-huge.cnf /data/mysql/3307/etc/my.cnf
[root@localhost support-files]# cp my-huge.cnf /data/mysql/3308/etc/my.cnf

修改配置文件内容,3306,3307,3308各实例配置文件修改my.cnf内容,修改端口,socket路径,数据存放目录等

[client]
#password       = your_password
port            = 3306       
socket          = /data/mysql/3306/socket/mysql.sock

[mysqld]
port            = 3306
socket          = /data/mysql/3306/socket/mysql.sock
datadir=/data/mysql/3306

同样,3307,3308实例也要修改同样的配置

编辑服务运营脚本

#!/bin/bash

port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/local/mysql/bin"
mysql_basedir="/data/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "MySQL is running...\n"
      exit
    fi
}


function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
#       ${cmd_path}/mysqladmin -u ${mysql_user} -S ${mysql_sock} shutdown
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
   fi
}


function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac

上面包车型大巴脚本要未雨计划三份,因为mysql实例是独家独立管理的,将上面的剧本参数port变量修改成3307,3308就能够,放在
各自实例的bin目录,服务运转是从各自实例的bin目录下进行那本子

port=3307
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/local/mysql/bin"
mysql_basedir="/data/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

发轫化数据库

[root@localhost mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/3306/data

[root@localhost mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/3307/data

[root@localhost mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/3308/data

简单理解就是在一台服务器上。修改mysql实例目录属主

chown -R mysql:mysql /data/mysql

启航各实例服务

[root@localhost ~]# /data/mysql/3306/bin/mysqld start
[root@localhost ~]# /data/mysql/3307/bin/mysqld start
[root@localhost ~]# /data/mysql/3308/bin/mysqld start

[root@localhost mysql]# ss -tnl
State      Recv-Q Send-Q                                 Local Address:Port                                   Peer Address:Port 
LISTEN     0      80                                                :::3306                                             :::*     
LISTEN     0      80                                                :::3307                                             :::*     
LISTEN     0      80                                                :::3308                                             :::*     
LISTEN     0      128                                               :::22                                               :::*   

测量检验登入

[root@localhost ~]# mysql -S /data/mysql/3306/socket/mysql.sock
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.2.15-MariaDB-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> 

由来mysql的多实例安装到位,在这种多实例的条件下,能够独立选择个实例实行数据存款和储蓄,也能够将各实例配置成主从架构举行应用,下边顺便把mysql的着力也介绍使贯彻一下,关于mysql的为主架构,以往会特意商量各个作用,这里只简轻易单完毕,能够协助理清主从复制的行事经过和布署进度。

MySQL多实例主从复制

在开端着力配置在此之前先简介一下mysql的主从复制原理,
mysql复制原理差不离如下:
1,mysql主数据库在事物提交时会把数量变动作为事件events记录在二进制日志文件bin-log中,mysql主库上的sync_binlog参数调节bin-log日志刷新到磁盘

2,主库推送二进制日志文件bin-log中的事件到从库的连片日志Relay Log
,之后从库依据中继日志Relay
log重写多少操作将数据写入从库,以此达到主库和从库的数码一致

mysql复制进程中经过3个线程来造成复制操作:其中binlog
dump线程在主库上,I/O线程和SQL线程在从库上,当在从库上运维复制(START
SLAVE)时,首先会I/O线程连接主库,(连接主库顾客用主库创造),主库随后创办binlog
dump线程读取数据库事件(binlog日志)并发送给I/O线程,I/O获取到binlog日志数据后更新到从库的连结日志Relay
log中,从库上的SQL线程读取中继日志Relay log
中数据写入本地数据库,最后水到渠成主从复制。

www.yabovip4.com 1

一主多从的贯彻

本文实现一主多种的办法,即上边的3个mysql实例,3306实例作为主库,3307和3308看作从库,达成主从复制的极致重大的是日记文件的设置,主库必须求张开二进制日志,从库要关闭二进制,并且展开中继日志relay
log,要点如下:

  • 主库成立提供从库的联合客户
  • 简单理解就是在一台服务器上。主库开启二进制日志
  • 从库开启中继日志relay log,并关闭二进制日志成效
  • 骨干之间的server-id不能够同一
  • 大旨时间同步 (由于在同一台主机,步奏略过)

安顿主从库实例的安插文件

查看mysql是或不是开启二进制和连通日志

MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables like 'relay_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| relay_log     |       |
+---------------+-------+
1 row in set (0.00 sec)

mysql安装私下认可会启用二进制日志,但么有运转relay
log,所以主库上没有须求安装,从库须求张开中继日志:
编写实例3307,3308的my.cnf关闭bin-log,开启中继日志,修改server-id

3307实例:

#log-bin=mysql-bin
relay-log=relay-log
server-id       = 2

3308实例:

#log-bin=mysql-bin
relay-log=relay-log
server-id       = 3

修改后要重启3307,3308实例

[root@localhost ~]# /data/mysql/3307/bin/mysqld restart
Restarting MySQL...
Stoping MySQL...
Enter password: 
Starting MySQL...

[root@localhost ~]# /data/mysql/3308/bin/mysqld restart
Restarting MySQL...
Stoping MySQL...
Enter password:    #这里提示要输入密码,因为中定义了要输入密码
Starting MySQL...

重启从库实例后检查日志启用情形

MariaDB [(none)]> show variables like 'relay_log';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| relay_log     | relay-log |
+---------------+-----------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

主库成立同步复制的客户

MariaDB [(none)]> grant replication slave on *.* to yufu@'192.168.%.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

查阅主库的bin-log日志记录地方节点
因为在从库中使用change master to
指令连接主库时要钦点连接时主库的bin-log日志记录地点节点。

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      645 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

从库连接主库

报到到从库3307实例:

MariaDB [(none)]> change master to master_host='192.168.214.141',master_user='yufu',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=645;
Query OK, 0 rows affected (0.11 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)

签到到从库3308实例:

MariaDB [(none)]> change master to master_host='192.168.214.141',master_user='yufu',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=645;
Query OK, 0 rows affected (0.11 sec)

MariaDB [(none)]>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

开发银行从库复制效率

开始3307实例并查阅复制状态

MariaDB [(none)]> START SLAVE;      #
Query OK, 0 rows affected (0.80 sec)

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.214.141
                  Master_User: yufu
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 645
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 555
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes         #同时为yes才能成功同步数据
            Slave_SQL_Running: Yes

启航3308实例并查阅复制状态

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.214.141
                  Master_User: yufu
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 645
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 555
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

迄今,配置运维都尚未难点,上边从主库实例3306中写入一些数据看看看看3307,3308实例能或不能够经常同步数据

测量检验同步

报到主库3306实例写一些多少:

MariaDB [(none)]> create database yufu;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use yufu;
Database changed
MariaDB [yufu]> create table test(
    -> id varchar(10),
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.84 sec)

MariaDB [yufu]> insert into test values ('2323','yufuname');
Query OK, 1 row affected (0.00 sec)

签到从库3307实例查看数据:

MariaDB [(none)]> select * from yufu.test;
+------+----------+
| id   | name     |
+------+----------+
| 2323 | yufuname |
+------+----------+
1 row in set (0.00 sec)

登入从库3308实例查看数据:

MariaDB [(none)]>  select * from yufu.test;
+------+----------+
| id   | name     |
+------+----------+
| 2323 | yufuname |
+------+----------+
1 row in set (0.01 sec)

经过测验同步功效不奇怪,文章最后再一次总括一下mysql主从复制的宗旨:

1. 主库必需开启bin-log二进制日志
2. 从库必须拉开中继日志Relay-log,关闭bin-log
3. 为主的server-id 必需不能够长久以来
4. 主库成立同步客商
5. 管教地点安装后,登陆从库实行 change master to 指令
6. 基本时间共同

在末端的稿子里,会相比较详细介绍使用mysql的主从复制功效

招待待上访谈个人博客站点www.gudaoyufu.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注