linux运维、架构之路-MySQL多实例
一、MySQL多实例介绍
一台服务器上开启多个不同的服务端口(3306,3307,3308),运行多个MySQL服务进程,共用一套MySQL安装程序,多实例MySQL在逻辑上看是各自独立的
1、多实例主从复制原理图
2、优点
①有效利用服务器资源
②节约服务器资源
③资源互相抢占问题,其中一个实例并发很高或者慢查询,其它实例也受影响
3、应用场景
①公司资金紧缺
②并发访问不是特别大的业务
③门户网站应用MySQL多实例场景,一般是从库
4、MySQL多实例常见配置方案
①多配置文件、多启动程序的方案(常用)
②单一配置文件、单一启动程序多实例方案(一个配置文件,不好管理,耦合度太高,)
二、MySQL多实例部署
1、环境
[root@MySQL ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@MySQL ~]# uname -r
2.6.32-696.el6.x86_64
[root@MySQL ~]# hostname -I
172.19.5.54 172.16.1.54
2、安装MySQL
useradd -s /sbin/nologin -M mysql
cd /server/tools
tar xf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.36-linux-glibc2.5-x86_64 /application/mysql-5.6.36
ln -s /application/mysql-5.6.36/ /application/mysql
chown -R mysql.mysql /application/mysql
3、配置多实例启动命令和配置文件目录
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目录
chown -R mysql.mysql /data
6、授权mysql命令执行权限
find /data -type f -name "mysql"|xargs chmod +x
7、配置mysql命令启动环境变量
方法一:
ln -s /application/mysql/bin/* /usr/local/sbin/
方法二:
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
8、初始化多实例数据库
cd /application/mysql/scripts/
./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql #初始化数据库3306
./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql #初始化数据库3307
9、MySQL多实例服务启动
#启动服务
/data/3306/mysql start
/data/3307/mysql start
[root@MySQL data]# netstat -lntup|grep 330
tcp 0 0 :::3306 :::* LISTEN 3848/mysqld
tcp 0 0 :::3307 :::* LISTEN 4885/mysqld
10、MySQL多实例设置密码及登录
#设置密码:
mysqladmin -uroot password 123456 -S /data/3306/mysql.sock
mysqladmin -uroot password 123456 -S /data/3307/mysql.sock
#登录数据库,指定sock
mysql -uroot -p123456 -S /data/3306/mysql.sock
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多实例启动命令脚本
#!/bin/sh
#init
port=3306
mysql_user="root"
mysql_pwd="123456"
CmdPath="/application/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
#startup function
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
else
printf "MySQL is running...\n"
exit
fi
} #stop function
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
fi
} #restart function
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: /data/${port}/mysql {start|stop|restart}\n"
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多实例的更多相关文章
- linux运维架构师职业规划
1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...
- Linux运维必会的MySQL企业面试题大全
(1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...
- 写给自己看的Linux运维基础(二) - Apache/MySQL. 安全设置. 定时任务
本文使用环境为CentOS 6 Apache, PHP, MySQL等常用软件均可通过yum安装包获取 yum install httpd php mysql-server # mysql: 客户端; ...
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- Linux运维企业架构实战系列
Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...
- (转)linux运维必会MySQL企业面试题
linux运维必会MySQL企业面试题 老男孩教育运维班全体学员MySQL必会企业面试题最实战.最细致.最落地的运维实训基地,老男孩教育连续多年国内平均就业工资最高! 数据库的重要性是所有技术里最核 ...
- (转)Linux运维MySQL必会面试题100道
老男孩教育Linux运维班MySQL必会面试题100道 (1)基础笔试命令考察 (要求:每两个同学一组,一个口头考,一个上机实战作答,每5个题为一组,完成后换位) 1.开启MySQL服务 2.检测端口 ...
- Linux运维企业架构项目实战系列
Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...
- Linux 运维入门到跑路书单推荐
一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...
随机推荐
- QT LCDNumber使用
新建一个QT工程 然后在cpp文件中写入代码 #include "hello.h" #include <qthread.h> #include <QVariant ...
- 有限状态机在单片机和 Arduino 编程中的应用
有限状态机在单片机和 Arduino 编程中的应用,个人认为在实际中这是一种思想,意味着解决一类问题. 本帖最后由 张飞 于 2015-3-4 20:18 编辑 在单片机编程中,如果在不使用操作系统的 ...
- 《nginx 一》dns解析 nginx安装
DNS域名解析 整个过程大体描述如下,其中前两个步骤是在本机完成的,后8个步骤涉及到真正的域名解析服务器:1.浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束. ...
- Python3基础(2)模块、数据类型及运算、进制、列表、元组、字符串操作、字典
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- C# 的两种debug 方法
第一种:需要把调试方法改成debug代码用 #if DEBUG 包裹 using System; using System.Collections.Generic; using System.Text ...
- 数据库查询SQL语句的时候如何写会效率更高?
引言 以前刚开始做项目的时候,开发经验尚浅,遇到问题需求只要把结果查询出来就行,至于查询的效率可能就没有太多考虑,数据少的时候还好,数据一多,效率问题就显现出来了.每次遇到查询比较慢时,项目经理就会问 ...
- javascript中call()、apply()、bind()的用法理解
一.bind的用法 第一个:obj.showInfo('arg','arg_18');中传的2个参数通过showInfo方法改变的是obj下中的name和age 第二个:obj.showInfo.bi ...
- js学习的一些想法(有一些来自网络)
javascript开发最佳实践学习 1.给变量和函数命名--变量名和函数名尽量简短 好的变量命名应该是简短易懂的,还有需要避免的陷阱就是在命名中将数值与功能结合. 匈牙利命名法就是一个不错的选择,也 ...
- Eucalyptus简介
1.Eucalyptus是什么? Eucalyptus n.桉树 Eucalyptus is a Linux-based software architecture that implements ...
- 【转】Nginx跳转任意Http请求到Https
网站买了证书,绿条,多霸气! 那么自然得拦截http的访问方式了. 拦截http,301到https 各种Google,最后在Nginx官网找到例子,配置很简单,如下: server { listen ...