一、MySQL多实例介绍

           一台服务器上开启多个不同的服务端口(3306,3307,3308),运行多个MySQL服务进程,共用一套MySQL安装程序,多实例MySQL在逻辑上看是各自独立的

1、多实例主从复制原理图

2、优点

①有效利用服务器资源
②节约服务器资源
③资源互相抢占问题,其中一个实例并发很高或者慢查询,其它实例也受影响

3、应用场景

①公司资金紧缺
②并发访问不是特别大的业务
③门户网站应用MySQL多实例场景,一般是从库

4、MySQL多实例常见配置方案

①多配置文件、多启动程序的方案(常用)
②单一配置文件、单一启动程序多实例方案(一个配置文件,不好管理,耦合度太高,)

二、MySQL多实例部署

1、环境

  1. [root@MySQL ~]# cat /etc/redhat-release
  2. CentOS release 6.9 (Final)
  3. [root@MySQL ~]# uname -r
  4. 2.6.32-696.el6.x86_64
  5. [root@MySQL ~]# hostname -I
  6. 172.19.5.54 172.16.1.54

2、安装MySQL

  1. useradd -s /sbin/nologin -M mysql
  2. cd /server/tools
  3. tar xf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
  4. mv mysql-5.6.36-linux-glibc2.5-x86_64 /application/mysql-5.6.36
  5. ln -s /application/mysql-5.6.36/ /application/mysql
  6. chown -R mysql.mysql /application/mysql

3、配置多实例启动命令和配置文件目录

  1. mkdir -p /data/{3306,3307}/data

4、unzip data.zip 在/下直接解压覆盖/data目录(注:data.zip是打包好的多实例配置文件、数据、启动命令)

1
2
3
4
5
6
7
8
9
10
[root@MySQL data]# tree
.
├── 3306
│    ├── data         #3306实例数据文件目录
│    ├── my.cnf       #3306实例配置文件
│    └── mysql        #3306实例启动命令
└── 3307
    ├── data          #3307实例数据文件目录
    ├── my.cnf        #3307实例配置文件
    └── mysql         #3307实例启动命令

5、授权mysql用户管理/data目录

  1. chown -R mysql.mysql /data

6、授权mysql命令执行权限

  1. find /data -type f -name "mysql"|xargs chmod +x

7、配置mysql命令启动环境变量

  1. 方法一:
    ln -s /application/mysql/bin/* /usr/local/sbin/
  2. 方法二:
  3. echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
  4. source /etc/profile

8、初始化多实例数据库

  1. cd /application/mysql/scripts/
  2. ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql #初始化数据库3306
  3. ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql #初始化数据库3307

9、MySQL多实例服务启动

  1. #启动服务
  2. /data/3306/mysql start
  3. /data/3307/mysql start
  4. [root@MySQL data]# netstat -lntup|grep 330
  5. tcp 0 0 :::3306 :::* LISTEN 3848/mysqld
  6. tcp 0 0 :::3307 :::* LISTEN 4885/mysqld

10、MySQL多实例设置密码及登录

  1. #设置密码:
  2. mysqladmin -uroot password 123456 -S /data/3306/mysql.sock
  3. mysqladmin -uroot password 123456 -S /data/3307/mysql.sock
  4. #登录数据库,指定sock
  5. mysql -uroot -p123456 -S /data/3306/mysql.sock
  6. mysql -uroot -p123456 -S /data/3307/mysql.sock

三、MySQL多实例配置文件

/data/3306/my.cnf

[client]

port            = 3306

socket          = /data/3306/mysql.sock

[mysqld]

port            = 3306

socket          = /data/3306/mysql.sock

datadir         = /data/3306/data

open_files_limit    = 1024

back_log = 600

max_connections = 800

max_connect_errors = 3000

table_open_cache = 512

external-locking = FALSE

max_allowed_packet =8M

sort_buffer_size = 1M

join_buffer_size = 1M

thread_cache_size = 100

thread_concurrency = 2

query_cache_size = 2M

query_cache_limit = 1M

query_cache_min_res_unit = 2k

thread_stack = 192K

tmp_table_size = 2M

max_heap_table_size = 2M

long_query_time = 1

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

log-bin = /data/3306/mysql-bin

relay-log = /data/3306/relay-bin

relay-log-info-file = /data/3306/relay-log.info

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

expire_logs_days = 7

key_buffer_size = 16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors = 1032,1062

replicate-ignore-db=mysql

server-id = 4

/data/3307/my.cnf

[client]

port            = 3307

socket          = /data/3307/mysql.sock

[mysqld]

port            = 3307

socket          = /data/3307/mysql.sock

datadir         = /data/3307/data

open_files_limit    = 1024

back_log = 600

max_connections = 800

max_connect_errors = 3000

table_open_cache = 512

external-locking = FALSE

max_allowed_packet =8M

sort_buffer_size = 1M

join_buffer_size = 1M

thread_cache_size = 100

thread_concurrency = 2

query_cache_size = 2M

query_cache_limit = 1M

query_cache_min_res_unit = 2k

thread_stack = 192K

tmp_table_size = 2M

max_heap_table_size = 2M

long_query_time = 1

pid-file = /data/3307/mysql.pid

relay-log = /data/3307/relay-bin

relay-log-info-file = /data/3307/relay-log.info

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

expire_logs_days = 7

key_buffer_size = 16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors = 1032,1062

replicate-ignore-db=mysql

server-id = 5

        说明:对比两个配置文件之后,可以发现除了端口、server-id不一样,3306开启了log-bin功能,这样可以做MySQL主复制

四、MySQL多实例启动命令脚本

  1. #!/bin/sh
  2. #init
  3. port=3306
  4. mysql_user="root"
  5. mysql_pwd="123456"
  6. CmdPath="/application/mysql/bin"
  7. mysql_sock="/data/${port}/mysql.sock"
  8. #startup function
  9. function_start_mysql()
  10. {
  11. if [ ! -e "$mysql_sock" ];then
  12. printf "Starting MySQL...\n"
  13. /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
  14. else
  15. printf "MySQL is running...\n"
  16. exit
  17. fi
  18. }
  19.  
  20. #stop function
  21. function_stop_mysql()
  22. {
  23. if [ ! -e "$mysql_sock" ];then
  24. printf "MySQL is stopped...\n"
  25. exit
  26. else
  27. printf "Stoping MySQL...\n"
  28. ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
  29. fi
  30. }
  31.  
  32. #restart function
  33. function_restart_mysql()
  34. {
  35. printf "Restarting MySQL...\n"
  36. function_stop_mysql
  37. sleep 2
  38. function_start_mysql
  39. }
  40.  
  41. case $1 in
  42. start)
  43. function_start_mysql
  44. ;;
  45. stop)
  46. function_stop_mysql
  47. ;;
  48. restart)
  49. function_restart_mysql
  50. ;;
  51. *)
  52. printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
  53. esac

五、遇到的错误

1、[ERROR] Plugin 'InnoDB' init function returned error

删除MySQL目录下的ib_logfile0和ib_logfile1两个文件,就可以解决问题了

2、5.5.32——>5.6.36配置参数不对导致多实例无法启动

table_cache——>table_open_cache = 512(5.6改名了)

六、生产环境多实例配置环境

1、一般在1-4个实例之间居多,1-2个最多,大业务占用的机器比较多,机器R510居多,CPU是E5210,48G内存,硬盘12*300G SAS,RAID10

2、内存32G,双cpu8核,硬盘6X600G,跑2-3个实例

linux运维、架构之路-MySQL多实例的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. Linux运维必会的MySQL企业面试题大全

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  3. 写给自己看的Linux运维基础(二) - Apache/MySQL. 安全设置. 定时任务

    本文使用环境为CentOS 6 Apache, PHP, MySQL等常用软件均可通过yum安装包获取 yum install httpd php mysql-server # mysql: 客户端; ...

  4. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  5. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  6. (转)linux运维必会MySQL企业面试题

    linux运维必会MySQL企业面试题  老男孩教育运维班全体学员MySQL必会企业面试题最实战.最细致.最落地的运维实训基地,老男孩教育连续多年国内平均就业工资最高! 数据库的重要性是所有技术里最核 ...

  7. (转)Linux运维MySQL必会面试题100道

    老男孩教育Linux运维班MySQL必会面试题100道 (1)基础笔试命令考察 (要求:每两个同学一组,一个口头考,一个上机实战作答,每5个题为一组,完成后换位) 1.开启MySQL服务 2.检测端口 ...

  8. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  9. Linux 运维入门到跑路书单推荐

    一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...

随机推荐

  1. docker nginx部署.net core后端站点和angular前端站点

    首先声明,服务器是linux 版本是ubuntu server 18.04,不是windows server.windows server 2016放弃治疗了,2019可能会有改善,不过云厂商的公共镜 ...

  2. Nginx负载均衡与反向代理的配置实例

    user www www; worker_processes 10; error_log /data1/logs/nginx_error.log crit; pid /usr/local/webser ...

  3. jquery的.get方法说解

    ·Customer类 public class Customer { public int Unid { get; set; } public string CustomerName { get; s ...

  4. java与模式读后总结

    一 老规则边看边写书上的代码,磨磨蹭蹭三个多星期终于把一本1000+的java与模式看完了. 于是,在这里贴上自己对每个模式的思考和总结,其实这个东西在我边看边写的时候已经写了一大半,博文再写一次算是 ...

  5. SpringMVC04 很杂很重要(注解,乱码处理,通配符,域属性调用,校正参数名称,访问路径,请求、响应携带参数,请求方法)

    1.导入架包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...

  6. webpack 的异步组件 生成commonchunks

    new webpack.optimize.CommonsChunkPlugin({ async: 'async-common', minChunks: function (module, count) ...

  7. 【Java】深入理解Java中的spi机制

    深入理解Java中的spi机制 SPI全名为Service Provider Interface是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用 ...

  8. android sqlite 递归删除一棵子树

    背景:android studio 3.0 GreenDao 目标:在android 中,如何做到递归删除某颗子树?? ======================================== ...

  9. Ajax 使用 FormData做为data的参数时 出现Illegal invocation

    今天在用ajax向后台传递数据时出现此错误,在ajax的参数中加上 contentType: false, processData: false, 这两句即可.

  10. shell实现网站备份

    #!/bin/bash ##back web directory scripts #需要备份的目录写入与脚本同级目录test.txt文件中 DIR="/data/server/www&quo ...