mysql多实例配置

  1                             MySQL进程多实例配置
  2 进程多实例概念:
  3   同一主机启动相同的二进制程序使用各自的配置文件管理资源并通过监听不同的套
  4   接字对外提供服务,以启动多个进程实现的方式就可理解为进程的多实例。
  5 
  6 组成要素:
  7   1 相同的二进制程序 (rpm包,源码包提供)
  8   2 不同的配置文件 (文件路径与文件名称)
  9   3 不同的数据文件 (配置文件里指定)
 10   4 不同的套接字(ip+port)
 11   5 不同的进程(pid,根据服务二进制程序支持的选项划分多实例启动标准)
 12 
 13 多实例管理与需要注意的问题:
 14   1 统一命名方式(方便自动化部署实施)
 15   2 使用独自的日志文件(主要用来统计或者排错)
 16   3 复制数据资源或者配置文件时需要根据具体服务进行逻辑判断,有的服务运行时产生进程或资源的标识,而且要求全局唯一,所以在两个实例之间复制资源时
 17     即便改了相关配置,运行时也有可能报错。这时需要借助日志来实时修改,配置mysql的多实例就会产生这种错误
 18 
 19 具体示例之MySQL的多实例:
 20 
 21 一 配置环境:
 22     操作系统:CentOS 6.7
 23     数据库版本:MySQL 5.6.30 (源码)
 24     主机IP:172.18.0.105
 25     实例数量:3
 26 
 27 二 实施规划:
 28      1 二进制程序位置: /usr/local/mysql
 29 
 30      2 监听的端口:3306,3307,3308
 31 
 32      3 配置文件:/etc/mysql/3306/my.cnf
 33                /etc/mysql/3307/my.cnf
 34                /etc/mysql/3308/my.cnf
 35 
 36      4 数据文件:/mydata/data/3306
 37                 /mydata/data/3307
 38                 /mydata/data/3308
 39 
 40      5 服务日志:/var/log/mysql3306.log
 41                /var/log/mysql3307.log
 42                /var/log/mysql3308.log
 43 
 44      6 pid文件路径:/var/run/mysqld/3306.pid
 45                   /var/run/mysqld/3307.pid
 46                   /var/run/mysqld/3308.pid
 47 
 48      7 进程启动:根据--defaults-file选项来作为启动标准进而区分不同实例
 49         shell>/usr/local/mysql/bin/mysqld_safe  --defaults-file="实例配置文件路径"
 50 
 51 三 实施思想
 52      先配置一个mysql--》复制相同数据到其他实例—》修改配置文件—》启动
 53 
 54 四 具体实施步骤
 55     1. 创建MySQL用户与数据目录
 56         shell>useradd -r mysql
 57         shell>mkdir /mydata/{data,log-bin,log-relay}/{3306,3307,3308} -pv
 58       
 59     2. 编译安装MySQL (此处本人使用脚本安装)
 60         shell>tar xfv mysql-5.6.30.tar.gz 
 61         shell>cd mysql-5.6.30
 62         shell>cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
 63               -DMYSQL_DATADIR=/mydata/data/ 
 64               -DSYSCONFDIR=/etc/ -DWITH_INNOBASE_STORAGE_ENGINE=1 
 65               -DWITH_BLACKHOLE_STORAGE_ENGINE=1 
 66               -DWITH_FEDERATED_STORAGE_ENGINE=1 
 67               -DWITH_ARCHIVE_STORAGE_ENGINE=1 
 68               -DWITH_READLINE=1 
 69               -DWITH_SSL=system 
 70               -DWITH_ZLIB=system 
 71               -DWITH_LIBWRAP=0 
 72               -DMYSQL_UNIX_ADDR=/mydata/data/mysql.sock 
 73               -DDEFAULT_CHARSET=utf8 
 74               -DDEFAULT_COLLATION=utf8_general_ci 
 75               -DMYSQL_TCP_PORT=3306 
 76               -DENABLED_LOCAL_INFILE=1 
 77               -DWITH_DEBUG=0 -DENABLED_PROFILING=1 
 78               -DWITH_EXTRA_CHARSETS=all 
 79               -DWITH_INNODB_MEMCACHED=1
 80         shell>make install
 81 
 82     3. 初始化mysql数据库(两种方式)
 83        A.通过mysql_install_db命令为每一个实例提供初始化数据(干净的数据库)
 84           shell>/usr/local/mysql/bin/mysql_install_db  --basedir=/mydata/data/3306 --user=mysql
 85           shell>/usr/local/mysql/bin/mysql_install_db  --basedir=/mydata/data/3307 --user=mysql
 86           shell>/usr/local/mysql/bin/mysql_install_db  --basedir=/mydata/data/3308 --user=mysql
 87       
 88        B.通过复制一个实例的初始化数据文件到其他实例的数据目录(主从复制可以使用此种方式,更快捷)
 89          shell>/usr/local/mysql/bin/mysql_install_db  --basedir=/mydata/data/3306 --user=mysql
 90          shell>for i in 3307 3308;do cp -ra /mydata/data/3306/* /mydata/data/$i;done
 91          shell>for i in 3307 3308;do rm -rf /mydata/data/$i/auto.cnf;done
 92          shell>cat /mydata/data/3306/auto.cnf
 93          [auto]
 94          server-uuid=504e62be-92bd-11e6-8fb9-000c295a3442
 95        
 96        说明:这个数据目录下的auto.cnf 记录了每个MySQL实例启动后生成的uuid,如果在做mysql的主从复制,则要求这个uuid在主从复制集群中唯一
97 删除后mysql重启自动生成,所以第3步使用cp初始化mysql数据时
一定要小心这个文件,此文件就是由进程实时生成的,所以在做多实例一定
98 要考虑周全,此外使用虚拟化技术
克隆虚拟机时也要注意此问题。
99
100 101 4. 创建mysql配置文件如下: 102 shell>grep "^[^#]" /etc/mysql/3306/my.cnf 103 [mysqld] 104 datadir=/mydata/data/3306 105 socket=/mydata/data/3306/mysql.sock 106 port=3306 107 pid-file=/var/run/mysqld/3306.pid 108 log-error=/var/log/mysqld3306.log 109 user=mysql 110 innodb_file_per_table=ON 111 skip_name_resolve=ON 112 log-bin=/mydata/log-bin/3308/mysql-bin 113 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 114 115 shell>grep '^[^#]' /etc/mysql/3306/my.cnf | sed 's@3306@3307@g' > /etc/mysql/3307/my.cnf 116 shell>grep '^[^#]' /etc/mysql/3306/my.cnf | sed 's@3306@3308@g' > /etc/mysql/3308/my.cnf 117 118 说明:上面由于使用基于端口的统一命令规范,所以在操作时搭配sed命令会非常自由灵活高效 119 120 5.修改mysql相关文件的权限使mysql进程对其有权限,并启动MySQL实例 121 shell>chown -R mysql.mysql /mydata 122 shell>mysqld_safe --defaults-file=/etc/mysql/3306/my.cnf &> /dev/null & 123 shell>mysqld_safe --defaults-file=/etc/mysql/3307/my.cnf &> /dev/null & 124 shell>mysqld_safe --defaults-file=/etc/mysql/3308/my.cnf &> /dev/null & 125 126 说明:如果有哪个实例启动不了,一般是mysql进程访问某个文件权限问题或者与其他实例冲突(比如配置文件里没指定port选项,使用mysqld_safe启动也没指定--port) 127 也可以查看对应实例的日志文件 /var/log/mysql$port.log 128 129 mysql进程可以接受SIGHUP信号完成reload功能,所以sys 风格脚本可以根据需要编写,此处省略 130 131 6.连接mysql,需要指定连接的端口和所用的unix sock文件(如果使用套接字通信时) 132 shell>mysql -P 3306 -S /mydata/data/3306/mysql.sock 133 134 说明:mysql在完成最基本的功能后,还要根据指定的策略完成mysql安全配置 135 136 五 添加一个mysql实例,比如3309 137 138 1.shell>for i in `ls /mydata/`;do mkdir /mydata/$i/3309;done 139 2.shell>/usr/local/mysql/bin/mysql_install_db --basedir=/mydata/data/3309 --user=mysql (干净的mysql) 140 141 shell>cp -ra /mydata/data/3306/* /mydata/data/3309 (主从复制) 142 3.shell>grep '^[^#]' /etc/mysql/3306/my.cnf | sed 's@3306@3309@g' > /etc/mysql/3309/my.cnf 143 4.shell>chown -R mysql.mysql /mydata 144 5.shell>mysqld_safe --defaults-file=/etc/mysql/3309/my.cnf &> /dev/null & 145 146 六 总结: 147 148 进程多实例需要注意的问题: 149 1 运行多实例的主机一定要系统硬件资源跟的上,每增加一个实例都要查看系统剩余资源 150 2 由于多实例存在一台主机上所以一旦主机宕机,如果没有做备分就导致灾难性业务中断 151 3 对于相同进程在执行命令的时候一定要慎之又慎,尤其是带有通配功能的命令,比如pkill,killall 152 4 依靠ip对此进程部署或者监控的工具,需要更困难的判断条件 153 154
原文地址:https://www.cnblogs.com/M18-BlankBox/p/5965491.html