mysql-pultipath多实例数据库

版权声明:欢迎指正,评论,共同学习 https://blog.csdn.net/m18994118189/article/details/82882478

8 . 1 . 1 什 么 是 MYSQL 多 实 例 ?

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

 

 

 

8 . 1 . 2 MYSQL 多 实 例 的 作 用 与 问 题

优势

(1).有 效 利 用 服 务 器 资 源

 (2) 节 约 服 务 器 资 源 . .

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

问题:

(1)資 源 互 相 抢 占 问 题

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

 

 

 MYSQL 多 实 例 生 产 应 用 场 景

(1) 资 金 紧 张 型 公 司 的 选 择

当 公 司 业 务 访 司 量 不 太 大 , 又 舍 不 得 花 钱 , 但 又 希 望 不 同 业 务 的 数 据 库 服 务 各 自 尽 量 独 立 的 提 供 服 务 互 不 受 影 响 , 而 且 , 需 要 主 从 同 步 进 行 等 技 术 提 供 备 份 或 读 写 分 离 服 务 时 , 多 实 例 就 再 好 不 过 了 ; 如 . 可 以 通 过 3 台 服 务 器 部 署 6-9 个 实 例 , 交 叉 做 主 从 同 步 备 份 及 读 写 分 离 , 实 现 6-9 台 服 务 器 才 有 的 效 果 : 这 里 要 强 调 的 是 , 所 谓 的 尽 量 独 立 是 对

 

(2)并 发 访 问 不 是 特 别 大 的 业 务

当 公 司 业 务 访 问 量 不 太 大 的 时 候 , 菔 务 器 的 资 源 基 本 都 是 浪 费 的 , 这 时 就 很 适 合 多 个应 用 , 如 果 对 SQL 语 句 优 化 做 的 比 较 好 , MySQL 多 实 例 个 值 得 使 技 本 。

(3) 门 户 网 站 应 用 MySQL 多 实 例 场 景

百 度 搜 索 引 擎 的 数 据 库 就 是 多 实 例 , 一 般 是 从 库 ,48核, 内 存 96G , 跑 3-4 个 实 例 , Sina 网 也 是 用 的 多 实 例 , 内 存 48G 左 右 。 门 户 网 站 使 用 多 实 例 的 目 的 是 配 硬 件 好 的 服 务 器 , 节 省 IDC 机 柜 空 间 , 同 时 , 跑 多 实 例 让 硬 件 资 源 不 浪 费 

 

(1)安装依赖mysql安装包

[root@mysql-multipath ~]# yum -y install ncurses-devel.x86_64

[root@mysql-multipath ~]# yum -y install libaio-devel

(2)添加用户,组

[root@mysql-multipath ~]# groupadd mysql

[root@mysql-multipath ~]# useradd -s /sbin/nologin -g mysql -M mysql

[root@mysql-multipath ~]# tail -l /etc/passwd

(3)上传文件

[root@mysql-multipath ~]# cd /u01/software/

[root@mysql-multipath software]# ls

cmake-2.8.8.tar.gz  mysql-5.5.32.tar.gz  rhel-server-6.6-x86_64-dvd.iso

(4)安装cmake

[root@mysql-multipath software]# tar xf cmake-2.8.8.tar.gz

[root@mysql-multipath software]# cd cmake-2.8.8

[root@mysql-multipath cmake-2.8.8]# ./configure

---------------------------------------------

-- Enable ninja generator.

-- Looking for a Fortran compiler

-- Looking for a Fortran compiler

-- Configuring done

-- Generating done

-- Build files have been written to: /u01/software/cmake-2.8.8

---------------------------------------------

CMake has bootstrapped.  Now run gmake.

[root@mysql-multipath cmake-2.8.8]# make && make install

 

(5)安装mysql

[root@mysql-multipath software]# tar xf mysql-5.5.32.tar.gz        

[root@mysql-multipath software]# cd mysql-5.5.32

[root@mysql-multipath mysql-5.5.32]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32

 \

> -DMYSQL_DATADIR=/application/mysql-5.5.32/data \

> -DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \

> -DDEFAULT_CHARSET=utf8 \

> -DDEFAULT_COLLATION=utf8_general_ci \

> -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

> -DENABLED_LOCAL_INFILE=ON \

> -DWITH_INNOBASE_STORAGE_ENGINE=1 \

> -DWITH_FEDERATED_STORAGE_ENGINE=1 \

> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

> -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \

> -DWITH_FAST_MUTEXES=1 \

> -DWITH_ZLIB=bundled \

> -DENABLED_LOCAL_INFILE=1 \

> -DWITH_READLINE=1 \

> -DWITH_EMBEDDED_SERVER=1 \

> -DWITH_DEBUG=0

[root@mysql-multipath mysql-5.5.32]# make && make install

(6)生成不带版本的软件链接/application/mysql 即mysql安装路径

[root@mysql-multipath mysql-5.5.32]# ln -s /application/mysql-5.5.32/ /application/mysql

 

(7)创建路径并授予权限

[root@mysql-multipath mysql-5.5.32]# mkdir -p /data/{3306,3307}/data

[root@mysql-multipath 3306]# ls

data  my.cnf  mysql

[root@mysql-multipath 3307]# ls

data  my.cnf  mysql

[root@mysql-multipath data]# ls

3306  3307

[root@mysql-multipath data]# cd 3306

[root@mysql-multipath 3306]# ls

data  my.cnf  mysql

 

[root@mysql-multipath 3306]# chown -R mysql.mysql /data

[root@mysql-multipath 3306]# ll

total 12

drwxr-xr-x. 2 mysql mysql 4096 Dec 29 14:37 data

-rw-r--r--. 1 mysql mysql 1899 Dec 29 14:34 my.cnf

-rw-r--r--. 1 mysql mysql 1311 Dec 29 14:40 mysql

[root@mysql-multipath 3306]# ls

data  my.cnf  mysql

[root@mysql-multipath 3306]# chmod +x mysql

[root@mysql-multipath 3307]# chmod +x mysql

 

(8)设置环境变量

[root@mysql-multipath 3307]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile

[root@mysql-multipath 3307]# tail -l /etc/profile

            . "$i"

        else

            . "$i" >/dev/null 2>&1

        fi

    fi

done

 

unset i

unset -f pathmunge

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

[root@mysql-multipath 3307]# source /etc/profile

 

(9)初始化数据库

[root@mysql-multipath 3307]# cd /application/mysql/scripts/

[root@mysql-multipath scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data/ --user=mysql

Installing MySQL system tables...

OK

Filling help tables...

OK

[root@mysql-multipath scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data/ --user=mysql

Installing MySQL system tables...

OK

Filling help tables...

OK

 

(10)启动数据库

[root@mysql-multipath scripts]# /data/3306/mysql start

Starting MySQL...

[root@mysql-multipath scripts]# /data/3307/mysql start

Starting MySQL...

[root@mysql-multipath scripts]# lsof -i:3306

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  78354 mysql   12u  IPv4 150857      0t0  TCP *:mysql (LISTEN)

[root@mysql-multipath scripts]# lsof -i:3307

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  79073 mysql   11u  IPv4 151360      0t0  TCP *:opsession-prxy (LISTEN)

 

(11)登录数据库(/data/3306/mysql的脚本中start是不需要密码的,但是stop需要密码)

[root@mysql-multipath 3306]# mysql -S /data/3306/mysql.sock

 

 

[root@mysql-multipath 3306]# mysql -S /data/3307/mysql.sock

 

mysql> system ls(system后面可以直接执行操作系统的命令)

data        mysql                  mysql-bin.index  mysql_oldboy3306.err

my.cnf        mysql-bin.000001  mysql.sock           mysqld.pid

mysql> system mysql -S /data/3306/mysql.sock

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

Your MySQL connection id is 2

Server version: 5.5.32-log Source distribution

 

Copyright (c) 2000, 2013, 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> show databases;

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

| Database           |

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

| information_schema |

| d3306              |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.00 sec)

 

mysql> exit

Bye

mysql> show databases;

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

| Database           |

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

| information_schema |

| d3307              |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.00 sec)

 

mysql> exit

Bye

 

 

[root@mysql-multipath 3307]# /data/3307/mysql stop(/data/3306(3307)/mysql这个脚本中的start不需要密码,但是stop需要密码,所以当你stop的时候会报错)

Stoping MySQL...

Enter password:

/application/mysql/bin/mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: YES)'

 

[root@mysql-multipath 3307]# vi mysql   可以先将里面的密码清空就可以关闭了,就不会错

"mysql" 61L, 1311C#!/bin/sh

################################################

#this scripts is created by oldboy at 2007-06-09

#oldboy QQ:31333741

#site:http://www.etiantian.org

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

 

#init

port=3307

mysql_user="root"

mysql_pwd="Root123!@#"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

#startup function

function_start_mysql()

{

    if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

    elseprintf "MySQL is running...\n"exit

    fi

}

 

 

(12)设置密码,必须在数据库开启的情况下

 

[root@mysql-multipath 3307]# mysqladmin -u root -S /data/3307/mysql.sock password 'Root123!@#'

 

修改过密码后,要将修改后的密码放入到mysql中,否者登录时后报错

[root@mysql-multipath 3307]# mysqladmin -u root -S /data/3307/mysql.sock password 'Root123!@#'

 

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

[root@mysql-multipath 3307]# vi mysql

"mysql" 61L, 1301C#!/bin/sh

################################################

#this scripts is created by oldboy at 2007-06-09

#oldboy QQ:31333741

#site:http://www.etiantian.org

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

 

#init

port=3307

mysql_user="root"

mysql_pwd="Root123!@#"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

#startup function

function_start_mysql()

{

    if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

    elseprintf "MySQL is running...\n"exit

    fi

}

 

[root@mysql-multipath 3307】mysqladmin -u root -S /data/3307/mysql.sock password 'Root123!@#'   就不会报错了

[root@mysql-multipath 3306]# chmod 700 mysql

[root@mysql-multipath 3306]# cd ../3307

[root@mysql-multipath 3307]# ls

data  my.cnf  mysql  mysql.sock  mysql_oldboy3307.err  mysqld.pid

[root@mysql-multipath 3307]# chmod 700 mysql

[root@mysql-multipath 3307]# chown root.root mysql

[root@mysql-multipath 3307]# cd ../3306

[root@mysql-multipath 330own root.root

[root@mysql-multipath 3306]# pkill mysqld

[root@mysql-multipath 3306]# pkill mysqld

[root@mysql-multipath 3306]# lsof -i:3306

[root@mysql-multipath 3306]# lsof -i:3307

[root@mysql-multipath 3306]# /data/3306/mysql start

Starting MySQL...

[root@mysql-multipath 3306]# /data/3307

Starting MySQL...

[root@mysql-multipath 3306]# lsof -i:3306

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  80706 mysql   12u  IPv4 156636      0t0  TCP *:mysql (LISTEN)

[root@mysql-multipath 3306]# lsof -i:337

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  81424 mysql   11u  IPv4 157130      0t0  TCP *:opsession-prxy (LISTEN)

 

[root@mysql-multipath 3306]# 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.5.32-log Source distribution

 

Copyright (c) 2000, 2013, 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> system 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.5.32 Source distribution

 

Copyright (c) 2000, 2013, 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> select user,host from mysql.user;

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

| user | host            |

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

| root | 127.0.0.1       |

| root | ::1             |

|      | localhost       |

| root | localhost       |

|      | mysql-multipath |

| root | mysql-multipath |

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

6 rows in set (0.00 sec)

 

mysql> delete from mysql.user where user="";

Query OK, 2 rows affected (0.00 sec)

 

mysql> delete from mysql.user where user="";

mysql> select user,host from mysql.user;

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

| user | host            |

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

| root | 127.0.0.1       |

| root | ::1             |

| root | localhost       |

| root | mysql-multipath |

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

4 rows in set (0.01 sec)

 

mysql> select user,host from mysql.user;

mysql> delete from mysql.user where user="::1

Query OK, 0 rows affected (0.01 sec)

 

mysql> delete from mysql.user where user="::1";

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

| user | host            |

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

| root | 127.0.0.1       |

| root | ::1             |

| root | localhost       |

| root | mysql-multipath |

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

4 rows in set (0.01 sec)

 

mysql> select user,host from mysql.user;

mysql> delete from mysql.user where host="::1

Query OK, 1 row affected (0.01 sec)

 

mysql> delete from mysql.user where host="::1";

mysql> select user,host from mysql.user;

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

| user | host            |

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

| root | 127.0.0.1       |

| root | localhost       |

| root | mysql-multipath |

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

3 rows in set (0.01 sec)

 

mysql> select user,host from mysql.user;

mysql> delete from mysql.user where host="::1"

Bye

mysql> select user,host from mysql.user;

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

| user | host            |

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

| root | 127.0.0.1       |

| root | ::1             |

|      | localhost       |

| root | localhost       |

|      | mysql-multipath |

| root | mysql-multipath |

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

6 rows in set (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 user="";

Query OK, 2 rows affected (0.00 sec)

 

mysql> delete from mysql.user where host= "::1";

mysql> delete from mysql.user where host=

mysql> select user,host from mysql.user;

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

| user | host            |

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

| root | 127.0.0.1       |

| root | localhost       |

| root | mysql-multipath |

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

3 rows in set (0.00 sec)

 

mysql> exit

Bye

 

 

新添加一个实例3308

[root@mysql-multipath data]# mkdir -p /data/3308/data

[root@mysql-multipath data]# cd 3307

[root@mysql-multipath 3307]# ls

data  my.cnf  mysql  mysql.sock  mysql_oldboy3307.err  mysqld.pid

[root@mysql-multipath 3307]# cp my.cnf ../3308/

[root@mysql-multipath 3307]# cp mysql

[root@mysql-multipath 3307]# cd ../3308

[root@mysql-multipath 3308]# ls

data  my.cnf  mysql

[root@mysql-multipath 3308]# chown -R mysql.mysql /data/3308

[root@mysql-multipath 3308]# ls

data  my.cnf  mysql

 

修改my.cnf和mysql中的port和server_id

[root@mysql-multipath 3308]# vi my.cnf

[root@mysql-multipath 3308]# vi mysql

"mysql" 61L, 1311C#!/bin/sh

################################################

#this scripts is created by oldboy at 2007-06-09

#oldboy QQ:31333741

#site:http://www.etiantian.org

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

 

#init

port=3307

mysql_user="root"

mysql_pwd="Root123!@#"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

#startup function

function_start_mysql()

{

    if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

    elseprintf "MySQL is running...\n"exit

    fi

}

 

port=330:wq

"mysql" 61L, 1311C written

 

 

[root@mysql-multipath 3308]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/330

7

8

-bash: ./mysql_install_db: No such file or directory

[root@mysql-multipath 3308]# cd /application/mysql/scripts/

[root@mysql-multipath scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3

3308/data/ --user=mysql

Installing MySQL system tables...

OK

Filling help tables...

OK

 

 

[root@mysql-multipath scripts]# /data/3308/mysql start

Starting MySQL...

[root@mysql-multipath scripts]# lsof -i:3308

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  82279 mysql   11u  IPv4 159803      0t0  TCP *:tns-server (LISTEN)

 

 

[root@mysql-multipath scripts]# mysqladmin -u root -S /data/3308/mysql.sock password 'Root123!@#'

 

 

[root@mysql-multipath scripts]# mysql -uroot -p -S /data/3308

Enter password:

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

Your MySQL connection id is 2

Server version: 5.5.32 Source distribution

 

Copyright (c) 2000, 2013, 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>

[root@mysql-multipath scripts]# cd /data/3308

[root@mysql-multipath 3308]# ls

data  my.cnf  mysql  mysql.sock  mysql_oldboy3308.err  mysqld.pid

[root@mysql-multipath 3308]# vi mysql

"mysql" 61L, 1311C#!/bin/sh

################################################

#this scripts is created by oldboy at 2007-06-09

#oldboy QQ:31333741

#site:http://www.etiantian.org

#blog:http://oldboy.blog.51cto.com

#oldboy trainning QQ group: 208160987 226199307  44246017

################################################

 

#init

port=3308

mysql_user="root"

mysql_pwd="Root123!@#"

CmdPath="/application/mysql/bin"

mysql_sock="/data/${port}/mysql.sock"

#startup function

function_start_mysql()

{

    if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

    elseprintf "MySQL is running...\n"exit

    fi

}

猜你喜欢

转载自blog.csdn.net/m18994118189/article/details/82882478