设为首页 收藏本站
查看: 1012|回复: 0

[经验分享] linux运维、架构之路-MySQL多实例

[复制链接]

尚未签到

发表于 2017-11-18 06:39:05 | 显示全部楼层 |阅读模式
  一、MySQL多实例介绍
  一台服务器上开启多个不同的服务端口(3306,33307,3308),运行多个MySQL服务进程,共用一套MySQL安装程序,多实例MySQL在逻辑上看是各自独立的
  1、多实例主从复制原理图
   DSC0000.png
  2、优点
  ①有效利用服务器资源
②节约服务器资源
③资源互相抢占问题,其中一个实例并发很高或者慢查询,其它实例也受影响
  3、应用场景
  ①公司资金紧缺
②并发访问不是特别大的业务
③门户网站应用MySQL多实例场景,一般是从库
  4、MySQL多实例常见配置方案
  ①多配置文件、多启动程序的方案(常用)
②单一配置文件、单一启动程序多实例方案(一个配置文件,不好管理,耦合度太高,)
  二、MySQL多实例部署
  1、环境



[iyunv@MySQL ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[iyunv@MySQL ~]# uname -r
2.6.32-696.el6.x86_64
[iyunv@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是打包好的多实例配置文件、数据、启动命令)



[iyunv@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
[iyunv@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个实例

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-408099-1-1.html 上篇帖子: linux部署solr服务--小记 下篇帖子: Linux中more和less命令用法(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表