mysql多实例配置
时间:2021-07-01 10:21:17
帮助过: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
mysql多实例配置
标签: