阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL 主从复制配置 + MySQL Router 部署使用测试

175次阅读
没有评论

共计 20825 个字符,预计需要花费 53 分钟才能阅读完成。

4 个节点

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

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-04/142771p2.htm

11、登录数据库以添加远程登录帐号信息

[MySQL@mysqldb1 ~]$ mysql -u root -p  -P 3306 –socket=/tmp/mysql3306.sock

[mysql@mysqldb2 ~]$ mysql -u root -p  -P 3306 –socket=/tmp/mysql3306.sock

[mysql@mysqldb3 ~]$ mysql -u root -p  -P 3306 –socket=/tmp/mysql3306.sock

注:使用 mysql 用户执行上述命令前,先配置相关环境变量值

/home/mysql/.bash_profile

添加如下内容:

MYSQL3306HOME=/mysql/3306

PATH=$PATH:$MYSQL3306HOME/bin

export MYSQL3306HOME PATH

注:上述登录数据库是需有参数  –socket , 否则会报出如下错误:

Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock

– 为了安全起见,先删除默认生成的用户相关信息在创建一个指定名称的数据库管理员帐号

mysql> set  password  for  root@localhost  = password(‘rootroot’);

mysql> delete from mysql.db;

mysql> delete from mysql.user;

mysql> grant all privileges on *.* to ‘sysadmin’@’localhost’ identified by ‘mysql’ with grant option;

mysql> grant all privileges on *.* to ‘sysadmin’@’127.0.0.1’ identified by ‘mysql’ with grant option;

mysql> flush privileges;

mysql> select host,user from user where user=’sysadmin’;

– 退出当前连接,再次登录数据库,以验证新建数据库管理员帐号的合法性

– 以 MySQLDB1 节点为例测试

mysql> exit;

[mysql@mysqldb1 ~]$ mysql -h localhost -u sysadmin -p -P 3306 -S /tmp/mysql3306.sock

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.7.16-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

– 注:为了安全的需要,上述的连接数据库命令行中密码没有直接写出,而是在使用 -p 参数,再在提示符行中输入密码

确认有当前添加的用户即可进行远程登录数据库。

12、设置数据库自动启动

–MySQLDB1 节点

[root@mysqldb1 ~]# chkconfig –add mysql3306

[root@mysqldb1 ~]# chkconfig mysql3306 –list

mysql3306 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@mysqldb1 ~]# 

–MySQLDB2 节点

[root@mysqldb2 ~]# chkconfig –add mysql3306

[root@mysqldb2 ~]# chkconfig mysql3306 –list

mysql3306 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@mysqldb2 ~]# 

–MySQLDB3 节点

[root@mysqldb3 ~]# chkconfig –add mysql3306

[root@mysqldb3 ~]# chkconfig mysql3306 –list

mysql3306 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[root@mysqldb3 ~]# 

13、重启系统验证数据库自动启动服务功能

– 重启系统

[root@mysqldb1 ~]#  shutdown -r now

[root@mysqldb2 ~]#  shutdown -r now

[root@mysqldb3 ~]#  shutdown -r now

– 查看数据库服务是否随系统启动

–MySQLDB1 节点

[root@mysqldb1 ~]# service mysql3306 status

MySQL running (2122) [OK]

[root@mysqldb1 ~]# 

–MySQLDB2 节点

[root@mysqldb2 ~]# service mysql3306 status

MySQL running (2117) [OK]

[root@mysqldb2 ~]# 

–MySQLDB3 节点

[root@mysqldb3 ~]# service mysql3306 status

MySQL running (2119) [OK]

[root@mysqldb3 ~]# 

14、在 master 节点创建复制专业帐号

mysql> grant replication slave on *.* to ‘repl’@’%’ identified by ‘repl’;

Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

15、查看 master 主机信息(slave 服务器配置需要改信息)

[mysql@mysqldb1 ~]$ mysql -h localhost -u sysadmin -p -P 3306 -S /tmp/mysql3306.sock

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.7.16-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> show master status \G

*************************** 1. row ***************************

                        File: mysql_bin.000004

                Position: 403

      Binlog_Do_DB: test

 Binlog_Ignore_DB: mysql

 Executed_Gtid_Set:

1 row in set (0.00 sec)

mysql> 

16、在 MySQLDB2 节点配置复制,并启动复制

mysql> show slave status \G

Empty set (0.00 sec)

mysql> change master to

    -> master_host=’192.168.1.41′,

    -> master_port=3306,

    -> master_user=’repl’,

    -> master_password=’repl’,

    -> master_log_file=’mysql_bin.000004′,

    -> master_log_pos=403;

Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;

Query OK, 0 rows affected (0.17 sec)

mysql> 

17、复制功能测试

–MySQLDB1 节点

mysql> create database testdb;

mysql> use testdb;

Database changed

mysql> select database();

+————+

| database() |

+————+

| testdb |

+————+

1 row in set (0.00 sec)

mysql> create table t1(id int, name varchar(20));

Query OK, 0 rows affected (1.71 sec)

mysql> select * from t1;

Empty set (0.00 sec)

mysql> insert into t1 (id,name) values(1,’yangchao’);

Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;

+——+———-+

| id | name |

+——+———-+

| 1 | yangchao |

–MySQLDB1 节点

mysql> select * from t1;

Empty set (0.01 sec)

mysql> select * from t1;

+——+———-+

| id | name |

+——+———-+

| 1 | yangchao |

+——+———-+

1 row in set (0.00 sec)

mysql> 

———————– 复制功能正常 ————————————–

4 个节点

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

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-04/142771p2.htm

—————— 动态添加 MySQLDB3 节点(innobackupex) —————————

18、在 MySQLDB1 节点执行全库备份

[root@mysqldb1 ~]#  innobackupex –user=sysadmin –password=mysql –socket=/tmp/mysql3306.sock –defaults-file=/mysql/3306/my.cnf –slave-info /home/mysql

xtrabackup: Error: –defaults-file must be specified first on the command line

—- 提示配置文件参数必须放在第一位

[root@mysqldb1 ~]#  innobackupex –defaults-file=/mysql/3306/my.cnf –user=sysadmin –password=mysql –socket=/tmp/mysql3306.sock  –slave-info /home/mysql

19、将 /home/mysql/yyyy-mm-dd_hh24-mi-ss 这个文件夹拷贝到 Salve2 节点的 /home/mysql 目录下

注:或者直接用 scp 命令拷贝

scp  -r  /home/mysql/yyyy-mm-dd_hh24-mi-ss  root@mysrvc:/home/mysql

20、停止 MySQLDB3 节点上的 mysql 实例,并备份 data 目录

[root@mysqldb3 ~]# service mysql3306 stop

[root@mysqldb3 ~]# cd /mysql/3306

[root@mysqldb3 3306]# mv data data.bak

21、执行恢复

[root@mysqldb3 3306]# innobackupex –defaults-file=/mysql/3306/my.cnf –user=sysadmin –apply-log /home/mysql/yyyy-mm-dd_hh24-mi-ss

[root@mysqldb3 3306]# innobackupex –defaults-file=/mysql/3306/my.cnf –user=sysadmin –copy-back /home/mysql/yyyy-mm-dd_hh24-mi-ss

22、修改 data 目录所有者权限  (如果使用 mysql 用户备份操作时,则无需做目录所有者权限修改)

[root@mysqldb3 3306]# chown -R mysql:mysql data

23、启动数据库实例

[root@mysqldb3 3306]# service mysql3306 start

24、在 MySQLDB3 节点查看 Master 节点的二进制文件名和位置信息

[root@mysqldb3 3306]# cat data/xtrabackup_binlog_pos_innodb

mysql_bin.000004 976

[root@mysqldb3 3306]# 

25、配置 MySQLDB3 节点复制信息

[root@mysqldb3 3306]#  su – mysql

[mysql@mysqldb3 ~]# mysql -u sysadmin -pmysql -P 3306 –socket=/tmp/mysql3306.sock

mysql> show slave status \G

Empty set (0.00 sec)

mysql> change master to

    -> master_host=’192.168.1.41′,

    -> master_port=3306,

    -> master_user=’repl’,

    -> master_password=’repl’,

    -> master_log_file=’mysql_bin.000004‘,

    -> master_log_pos=976;

Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;

Query OK, 0 rows affected (0.17 sec)

mysql> 

26、在 MySQLDB3 启动复制功能

mysql> start save;

27、测试

在 MySQLDB1 节点的 test 数据库中执行创建数据表或数的更新操作,验证在 MySQLDB2 和 MySQLDB3 节点的 test 数据库中是否正常复制。

============================================

MySQL 主从复制几个重要的启动选项

(1)、log-slave-updates

log-slave-updates 这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器 B 是服务器 A 的从服务器,同时还作为服务器 C 的主服务器,那么就需要开发这个选项,这样它的从服务器 C 才能获得它的二进制日志进行同步操作。

(2)、master-connect-retry

master-connect-retry 这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是 60 秒。

(3)、read-only

read-only 是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作。

(4)、slave-skip-errors

在复制过程中,由于各种的原因,从服务器可能会遇到执行 BINLOG 中的 SQL 出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。

Slave-skip-errors 的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的 SQL 语句。

–slave-skip-errors=[err1,err2,…….|ALL]

但必须注意的是,启动这个参数,如果处理不当,很可能造成主从数据库的数据不同步,在应用中需要根据实际情况,如果对数据完整性要求不是很严格,那么这个选项确实可以减轻维护的成本

二、部署 MyRouter 服务

1、解压安装程序文件

[root@MySQLrouter mytmp]#  tar -xzvf mysql-router-2.0.4-linux-glibc2.12-x86-64bit.tar.gz

 

2、重命名安装文件夹

[root@mysqlrouter mytmp]#  mv mysql-router-2.0.4-linux-glibc2.12-x86-64bit /usr/local/mysqlrouter

 

3、创建日志和配置相关文件存放目录

[root@mysqlrouter mytmp]# cd /usr/local/mysqlrouter

[root@mysqlrouter mysqlrouter]# mkdir logs

[root@mysqlrouter mysqlrouter]# mkdir etc

 

4、创建配置文件 (利用模板文件创建)

[root@mysqlrouter mysqlrouter]#cp share/doc/mysqlrouter/sample_mysqlrouter.ini ./etc/mysqlrouter.ini

 

配置项内容如下:

[DEFAULT]

logging_folder = /usr/local/mysqlrouter/logs

plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter

config_folder = /usr/local/mysqlrouter/etc

runtime_folder = /usr/local/mysqlrouter/run

 

[logger]

level = INFO

 

[routing:read_write]

bind_address = 192.168.1.47

bind_port = 7001

mode = read-write

destinations = 192.168.1.41:3306

max_connections = 65535

max_connect_errors = 100

client_connect_timeout = 9

 

[routing:read_only]

bind_address = 192.168.1.47

bind_port = 7002

mode = read-only

destinations = 192.168.1.42:3306,192.168.1.43:3306

max_connections = 65535

max_connect_errors = 100

client_connect_timeout = 9

 

[keepalive]

interval = 60

 

:参数说明

bind_address  指定 mysql router 绑定的服务器

bind_port         指定绑定的端口

destinations     指定后端 mysql server 列表 (ip:port 格式,使用逗号分隔)

mode               读写模式(read-write, read_only)

 

5、启动 mysql router

[root@mysqlrouter mysqlrouter]# cd bin

[root@mysqlrouter bin]# ./mysqlrouter  -c  /usr/local/mysqlrouter/etc/mysqlrouter.ini  &

三、验证测试

1、读写分离测试

读写分离是通过在配置文件中配置的不同端口实现

由于 MySQLrouter 节点未安装 mysql 客户端程序,所以在 mysqldb1 节点测试

登录写节点:端口 7001

mysql  -h  192.168.1.47  -u  yangchao  -p -P 7001

MySQL 主从复制配置 + MySQL Router 部署使用测试

登录读节点:端口 7002

mysql  -h  192.168.1.47  -u  yangchao  -p -P 7002

MySQL 主从复制配置 + MySQL Router 部署使用测试

由上测试可知:两次从 7002 读取端口登录的主机节点都是在配置文件中配置的只读节点。

2、读取复制均衡测试

登录读节点:端口 7002

mysql  -h  192.168.1.47  -u  yangchao  -p -P 7002

MySQL 主从复制配置 + MySQL Router 部署使用测试

MySQL 主从复制配置 + MySQL Router 部署使用测试

由上测试的 4 次通过登录读取端口 7002 可知,分别在 mysqldb2,mysqldb3 两个读取节点间轮询访问,实现了读取操作的复制均衡功能。

3、高可用测试

1)、读取节点的高可用性:

先关闭读取节点 mysqldb2

MySQL 主从复制配置 + MySQL Router 部署使用测试

mysql  -h  192.168.1.47  -u yangchao  -p  -P  7002

MySQL 主从复制配置 + MySQL Router 部署使用测试

由上测试可知:两次的 7002 端口登录都是在存活节点 mysqldb3 上。

2)、读写节点的高可用性:

修改配置文件,为读写节点配置如下:

[routing:read_write]

bind_address = 192.168.1.47

bind_port = 7001

mode = read-write

destinations = 192.168.1.41:3306,192.168.1.42:3306

停止读写节点 mysqldb1

MySQL 主从复制配置 + MySQL Router 部署使用测试

登录 7001 端口:

MySQL 主从复制配置 + MySQL Router 部署使用测试

登录的是 mysqldb2 节点实例

插入记录测试:

MySQL 主从复制配置 + MySQL Router 部署使用测试

能成功插入数据。

在读取节点查看记录是否同步:

mysql  -h  localhost  -u  yangchao  -p  -P 3306  -S  /tmp/mysql3306.sock

MySQL 主从复制配置 + MySQL Router 部署使用测试

由上测试可知:读写的主节点可以实现故障切换,但并不能实现其复制角色色转变。

注:

1、在重新启动 mysqldb1 节点实例服务后,再登录读写节点时也并不能登录到 mysqldb1 实例了,需要重新启动 mysqlrouter 服务后,方能实现登录读写节点是 mysqldb1 节点主机。

2、由于其复制均衡采用的是轮询的方式,经测试爱多个从节点中某个实例故障后,mysqlrouter 仍然会轮询访问该故障节点,所以其仅实现的简单轮询负载而已,不能对节点状态实时监控。

3、本测试案例未考虑 mysqlrouter 的高可用性,其高可用性的实现可以使用 keepalived。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142771.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计20825字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中