1、MySQLDB1 192.168.1.41 (MySQL 主节点)
2、MySQLDB2 192.168.1.42 (MySQL从节点)
3、MySQLDB3 192.168.1.43 (MySQL从节点)
4、MySQLRouter 192.168.1.47 (MySQLRouter服务节点)
软件版本说明:
1、操作系统 CentOS6.6_x86_64
2、MySQLServer 5.7.16
3、MySQLRouter 2.0.4
一、部署MySQL主从复制
----------------------- 复制创建及配置主要步骤 -----------------------------------------
1、Master 端启用二进制日志,指定唯一的 server_id
2、Slave 端配置唯一的 server_id
3、Master 端创建复制专用帐号
4、记录 Master 端日志信息并创建镜像
5、配置 Slave 端的连接
-------------------------------------------------------------------------------------------
1、系统平台: CentOS 6.6 (64位)
2、软件版本:mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
3、为了模拟现实环境情况做如下前提条件假设:
1)、在搭建Master和Salve1时为一个全新的环境,即主数据库中无任何数据,Master和Slave1均为新环境部署
2)、在现有复制环境(Master+Slave1)中新增一个Slave2节点,现有复制环境中已有数据存在和修改过程执行
3)、Master节点的端口为3306,Slave1节点端口为3306,Slave2节点端口为3306
4)、为了部署方便,安装包使用二进制程序进行部署
----------------------------------------- 部署实现过程 -----------------------------------------------
1、用户及相关目录创建
--MySQLDB1 节点
[root@mysqldb1 ~]# groupadd mysql
[root@mysqldb1 ~]# useradd mysql -g mysql
[root@mysqldb1 ~]# mkdir /mysql
[root@mysqldb1 ~]# mkdir /mytmp
[root@mysqldb1 ~]# passwd mysql
--MySQLDB2 节点
[root@mysqldb2 ~]# groupadd mysql
[root@mysqldb2 ~]# useradd mysql -g mysql
[root@mysqldb2 ~]# mkdir /mysql
[root@mysqldb2 ~]# mkdir /mytmp
[root@mysqldb2 ~]# passwd mysql
--MySQLDB3 节点
[root@mysqldb3 ~]# groupadd mysql
[root@mysqldb3 ~]# useradd mysql -g mysql
[root@mysqldb3 ~]# mkdir /mysql
[root@mysqldb3 ~]# mkdir /mytmp
[root@mysqldb3 ~]# passwd mysql
2、设置用户操作系统资源的限制
--以避免在启动mysql服务是会报:
2017-04-11 17:27:03 3175 [Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 5000)
2017-04-11 17:27:03 3175 [Warning] Buffered warning: Changed limits: table_open_cache: 431 (requested 2000)
之类的警告信息
[root@mysqla ~]# vi /etc/security/limits.conf
在文件的最后添加如下内容
mysql soft nproc 2047
mysql hard nproc 16384
mysql soft nofile 1024
mysql hard nofile 65535
3、解压上传的二进制安装包程序并复制到目标目录下
--MySQLDB1 节点
[root@mysqldb1 mytmp]# tar -xzvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@mysqldb1 mytmp]# mv mysql-5.7.16-linux-glibc2.5-x86_64 /mysql/3306
--MySQLDB2 节点
[root@mysqldb2 mytmp]# tar -xzvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@mysqldb2 mytmp]# mv mysql-5.7.16-linux-glibc2.5-x86_64 /mysql/3306
--MySQLDB3 节点
[root@mysqldb3 mytmp]# tar -xzvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
[root@mysqldb3 mytmp]# mv mysql-5.7.16-linux-glibc2.5-x86_64 /mysql/3306
4、便于方便管理创建单独的日志文件存放目录
--MySQLDB1 节点
[root@mysqldb1 3306]# mkdir logs
--MySQLDB2 节点
[root@mysqldb2 3306]# mkdir logs
--MySQLDB3 节点
[root@mysqldb3 3306]# mkdir logs
5、目录权限修改
--MySQLDB1 节点
[root@mysdb1 ~]# chown -R mysql:mysql /mysql
--MySQLDB2 节点
[root@mysqldb2 ~]# chown -R mysql:mysql /mysql
--MySQLDB3 节点
[root@mysqldb3 ~]# chown -R mysql:mysql /mysql
6、数据库初始化安装
--MySQLDB1 节点
[root@mysqldb1 ~]# su - mysql
[mysql@mysqldb1 ~]$ cd /mysql/3306
[mysql@mysqldb1 3306]$ ./bin/mysqld --initialize --user=mysql --basedir=/mysql/3306 --datadir=/mysql/3306/data
--MySQLDB2 节点
[root@mysqldb2 ~]# su - mysql
[mysql@mysqldb2 ~]$ cd /mysql/3306
[mysql@mysqldb2 3306]$ ./bin/mysqld --initialize --user=mysql --basedir=/mysql/3306 --datadir=/mysql/3306/data
--MySQLDB3 节点
[root@mysqldb3 ~]# su - mysql
[mysql@mysqldb3 ~]$ cd /mysql/3306
[mysql@mysqldb3 3306]$ ./bin/mysqld --initialize --user=mysql --basedir=/mysql/3306 --datadir=/mysql/3306/data
注:1、数据库初始化的命令与5.6版本有所不同
2、数据库初始化完后,会自动为 root 用户生成一个密码,记住该密码,
不过该密码很快很过期,所以需要在配置文件添加 skip-grant-tables 来启动数据库实例
3、安装aio依赖包: yum install libaio*
7、参数文件配置
--MySQLDB1 节点 /mysql/3306/my.cnf
[client]
default_character_set = utf8
port = 3306
socket = /tmp/mysql3306.sock
[mysqld]
basedir = /mysql/3306
datadir = /mysql/3306/data
user = mysql
port = 3306
server_id = 13306
character_set_server = utf8
socket = /tmp/mysql3306.sock
pid-file = /tmp/mysql3306.pid
log-bin = /mysql/3306/logs/bin_log
relay-log = /mysql/3306/logs/relay_log
log-error = /mysql/3306/logs/mysql_error.log
explicit_defaults_for_timestamp = true
expire_logs_days = 10
max_binlog_size = 100M
binlog-do-db = testdb #复制数据库名称
binlog-ignore-db = mysql
--MySQLDB2 节点 /mysql/3306/my.cnf
[client]
default_character_set = utf8
port = 3306
socket = /tmp/mysql3306.sock
[mysqld]
basedir = /mysql/3306
datadir = /mysql/3306/data
user = mysql
port = 3306
server_id = 23306
character_set_server = utf8
socket = /tmp/mysql3306.sock
pid-file = /tmp/mysql3306.pid
log-bin = /mysql/3306/logs/bin_log
relay-log = /mysql/3306/logs/relay_log
log-error = /mysql/3306/logs/mysql_error.log
explicit_defaults_for_timestamp = true
expire_logs_days = 10
max_binlog_size = 100M
--MySQLDB3 节点 /mysql/3306/my.cnf
[client]
default_character_set = utf8
port = 3306
socket = /tmp/mysql3306.sock
[mysqld]
basedir = /mysql/3306
datadir = /mysql/3306/data
user = mysql
port = 3306
server_id = 33306
character_set_server = utf8
socket = /tmp/mysql3306.sock
pid-file = /tmp/mysql3306.pid
log-bin = /mysql/3306/logs/bin_log
relay-log = /mysql/3306/logs/relay_log
log-error = /mysql/3306/logs/mysql_error.log
explicit_defaults_for_timestamp = true
expire_logs_days = 10
max_binlog_size = 100M
8、清理配置参数文件
在Linux平台下,mysql程序默认会按照以下顺序扫描路径寻找配置文件
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf #通过CMake源代码编译时指定的SYSCONFDIR的参数指定的路径
$MYSQL_HOME/my.cnf #MYSQL_HOME环境变量所在路径,即mysql安装路径(basedir)
~/.my.cnf #~表示到当更前用户根目录下寻找
通过命令 find / -iname my.cnf 查询配置文件的存在性,仅保留 MYSQL_HOME/my.cnf 配置文件。
注:使用如下命令可查看mysql实例的配置文件搜索顺序
[root@mysqldb1 bin]# mysql --help | grep '/my.cnf'
9、配置启动脚本
--MySQLDB1 节点实例
[root@mysqla 3306]# cp support-files/mysql.server /etc/init.d/mysql3306
[root@mysqla 3306]# vi /etc/init.d/mysql3306
将如下内容
#basedir=...
#datadir=...
修改为:
basedir=/mysql/3306
datadir=/mysql/3306/data
--MySQLDB2 节点实例
[root@mysqlb 3306]# cp support-files/mysql.server /etc/init.d/mysql3306
[root@mysqlb 3306]# vi /etc/init.d/mysql3306
将如下内容
#basedir=...
#datadir=...
修改为:
basedir=/mysql/3306
datadir=/mysql/3306/data
--MySQLDB3 节点实例
[root@mysqlc 3306]# cp support-files/mysql.server /etc/init.d/mysql3306
[root@mysqlc 3306]# vi /etc/init.d/mysql3306
将如下内容
#basedir=...
#datadir=...
修改为:
basedir=/mysql/3306
datadir=/mysql/3306/data
10、数据库服务启动
--MySQLDB1 节点
[mysql@mysqldb1 ~]$ service mysql3306 start
--MySQLDB2 节点
[mysql@mysqldb2 ~]$ service mysql3306 start
--MySQLDB3 节点
[mysql@mysqldb3 ~]$ service mysql3306 start