首页 > 代码库 > mysql多实例配置

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.cnf103 [mysqld]104 datadir=/mydata/data/3306105 socket=/mydata/data/3306/mysql.sock106 port=3306107 pid-file=/var/run/mysqld/3306.pid108 log-error=/var/log/mysqld3306.log109 user=mysql110 innodb_file_per_table=ON111 skip_name_resolve=ON112 log-bin=/mydata/log-bin/3308/mysql-bin113 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES114 115 shell>grep ‘^[^#]‘ /etc/mysql/3306/my.cnf | sed ‘s@3306@3307@g‘ > /etc/mysql/3307/my.cnf116 shell>grep ‘^[^#]‘ /etc/mysql/3306/my.cnf | sed ‘s@3306@3308@g‘ > /etc/mysql/3308/my.cnf117 118 说明:上面由于使用基于端口的统一命令规范,所以在操作时搭配sed命令会非常自由灵活高效119 120 5.修改mysql相关文件的权限使mysql进程对其有权限,并启动MySQL实例121 shell>chown -R mysql.mysql /mydata122 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.log128 129 mysql进程可以接受SIGHUP信号完成reload功能,所以sys 风格脚本可以根据需要编写,此处省略130 131 6.连接mysql,需要指定连接的端口和所用的unix sock文件(如果使用套接字通信时)132 shell>mysql -P 3306 -S /mydata/data/3306/mysql.sock133 134 说明:mysql在完成最基本的功能后,还要根据指定的策略完成mysql安全配置135 136 五 添加一个mysql实例,比如3309137 138 1.shell>for i in `ls /mydata/`;do mkdir /mydata/$i/3309;done139 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.cnf143 4.shell>chown -R mysql.mysql /mydata144 5.shell>mysqld_safe --defaults-file=/etc/mysql/3309/my.cnf &> /dev/null &145 146 六 总结:147 148 进程多实例需要注意的问题:149 1 运行多实例的主机一定要系统硬件资源跟的上,每增加一个实例都要查看系统剩余资源150 2 由于多实例存在一台主机上所以一旦主机宕机,如果没有做备分就导致灾难性业务中断151 3 对于相同进程在执行命令的时候一定要慎之又慎,尤其是带有通配功能的命令,比如pkill,killall152 4 依靠ip对此进程部署或者监控的工具,需要更困难的判断条件153 154

 

mysql多实例配置