MySQL主从部署(同步+半同步)

云掣YunChe2周前技术文章44

一、环境规划

1.1服务器规划

服务器 IP 版本 配置 Mysql 端口 角色

172-16-104-8 172.16.104.8 CentOS release 6.8 (Final) 4c8g 5.7.27 3306 master

172-16-104-9 172.16.104.9 CentOS release 6.8 (Final) 4c8g 5.7.27 3306 slave

 

1.2 目录规划

软件 目录

MySQL软件安装目录 /usr/local/mysql/mysqlserver       

MySQL数据文件目录 /data/mysql/data                   

MySQL日志文件目录 /data/mysql/logs                   

MySQLbinlog日志目录 /data/mysql/binlog

MySQL配置文件目录 /etc/my.cnf                        

MySQL软件安装目录 /usr/local/mysql/mysqlserver       

 

二、基础配置

2.1环境描述: 准备三台基本安装的服务器

mysql-server :4 核 2G 内存,rhat6.5,172.16.1.43

mysql-slave :4 核 2G 内存 ,rhat6.5,172.16.1.63

 

2.2、配置主机名

hostname

2.3 配置ip、域名解析

vi /etc/hosts

2.3、配置 yum 源

mkdir /yum mount /dev/cdrom /yum echo " mount /dev/cdrom /yum">>/etc/rc.local

mkdir /etc/yum.repos.d/bak

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

vim /etc/yum.repos.d/local.repo

[local_yum] name=local

yum baseurl=file:///yum

enabled=1

gpgcheck=0

 

2.4、关闭 iptables和 selinux

vim /etc/selinux/config

SELINUX=disabled

service iptables stop

 

三、安装主从

3.1 创建用户

groupadd mysql

useradd -g mysql mysql -s /sbin/nologin

id mysql

3.2 配置目录

mkdir -pv /data/mysql/{data,logs,binlog,tmp,redo}

chown -R mysql:mysql /data/mysql/

3.3 解压安装包

tar -zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local

mv mysql-5.7.27-linux-glibc2.12-x86_64 mysql

3.4 配置环境变量

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

source /root/.bash_profile

3.5 安装备份工具

# 解压安装包并将文件复制到 /usr/bin

tar xvf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz ./

cd percona-xtrabackup-2.4.4-Linux-x86_64

cp bin/innobackupex /usr/bin

cp bin/xtrabackup* /usr/bin

 

# 安装相关插件

yum install -y perl perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey

 

3.5 修改配置文件

[root@mysql-tar data]# vim /etc/my.cnf

basedir=/var/lib/mysql

datadir=/var/lib/mysql/data

socket=/var/lib/mysql/mysql.sock

log-error=/var/lib/mysql/mha-server.err

pid-file=/var/run/mysqld/mysqld.pid

port=3306

server-id=1

read_only=off

innodb_buffer_pool_size=1073741824

log_bin=mha-server

binlog_format=row

innodb_doublewrite=on

join_buffer_size = 128M

sort_buffer_size = 2M

read_rnd_buffer_size = 2M

innodb_read_io_threads=6

innodb_write_io_threads=6

innodb_purge_threads=6

slow_query_log=ON

slow_query_log_file=chen.slow

long_query_time=2

log_queries_not_using_indexes=1

log_throttle_queries_not_using_indexes=10

innodb_data_file_path = ibdata1:100M:autoextend

show_compatibility_56=on

skip_name_resolve=on

expire_logs_days = 5

binlog_rows_query_log_events=on

relay_log_purge = 0

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR

_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

'

 

备库:

server-id=2

relay_log_purge=0

read_only=on

slave_preserve_commit_order=1

log_slave_updates=1

slave_parallel_type=logical_clock

slave_parallel_workers=4

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

3.6 主库

3.6.1安装mysql

#初始化

/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure &

检查一下是否生成必要的文件及目录

cd data/

 

#启动mysql

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

 

#修改密码

mysql> flush privileges;

mysql> alter user 'root'@'localhost' identified by '199678';

mysql> flush privileges;

 

 

3.6.2 创建复制用户

mysql> grant replication slave,replication client on *.* to 'repl'@'172.16.1..%' identified by 'repl';

 

#在主库上, 设置读锁定有效, 这个操作是为了确保没有数据库操作, 以便获得一个一致性的快照如果可以确定主数据库没有读写操作, 可以不执行当前步骤

mysql> flush tables with read lock;

从当前主库获得二进制日志名和偏移量值. 这个操作的目的是为了在从数据库启动以后, 从这个点开始进行数据的恢复.

mysql> show master status;

mysql> show master status;

+-------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+-------------------+----------+--------------+------------------+-------------------+

| mha-server.000003 | 154 | | | |

+-------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

 

3.6.3全备

创建备份目录并授权

[root@root mysql]# mkdir /backup

[root@root backup]# chown -R mysql:mysql .

[root@root mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --no-timestamp /backup/

 

mysql> unlock tables;   主数据库备份完毕后, 恢复写操作

将备份传输到备库

3.7 从库

3.7.1恢复从库

#备份授予 MySQL 权限

 [root@root backup]# chown -R mysql:mysql /backup/

#应用备份

 [root@root backup]# innobackupex --copy-back /backup/

#启动数据库

 mysqld_safe --defaults-file=/etc/my.cnf &

3.7.2开启同步

[root@mha-server backup]# mysql -p199678

mysql> CHANGE MASTER TO MASTER_HOST='172.16.1.43',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mha-server.000003',MASTER_LOG_POS=154,MASTER_CONNECT_RETRY=10; //log_file、log_pos的值是上一步在主库中查到的

mysql> start slave;    //启动复制线程

 

3.8 查看同步情况

1、show processlist

从库:

mysql> show processlist;

| Id | User | Host | db | Command | Time | State | Info |

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

| 1 | system user | | NULL | Connect | 5073 | Waiting for master to send event | NULL |

| 2 | system user | | NULL | Connect | 5073 | Slave has read all relay log; waiting for more updates | NULL |

| 3 | system user | | NULL | Connect | 5073 | Waiting for an event from Coordinator | NULL |

| 4 | root | localhost | NULL | Query | 0 | starting | show processlist |

+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+

4rows in set (0.00 sec)

 

主库:

 mysql> show processlist;

| Id | User | Host | db | Command | Time | State | Info |

+----+------+-------------------+------+-------------+------+---------------------------------------------------------------+------------------+

| 9 | repl | 172.16.1.53:34176 | NULL | Binlog Dump | 4951 | Master has sent all binlog to slave; waiting for more updates | NULL |

| 10 | repl | 172.16.1.63:48742 | NULL | Binlog Dump | 4744 | Master has sent all binlog to slave; waiting for more updates | NULL |

| 12 | root | localhost | NULL | Query | 0 | starting | show processlist |

+----+------+-------------------+------+-------------+------+---------------------------------------------------------------+------------------+

3 rows in set (0.00 sec)

 

2、show slave status\G;


3、添加新数据, 或者创建新表检查数据是否正常同步

四、配置半同步

4.1 部署半同步

#首先判断MySQL服务器是否支持动态增加插件

mysql> select @@have_dynamic_loading

#确认支持动态增加插件后,检查MySQL的安装目录下是否存在插件semisync_master.so和semisync_slave.so

mysql> show variables like 'plugin_dir'; #查看插件存入地址

 

1、master端:

#安装半同步复制插件

 

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

 

#打开半同步复制功能

mysql> set global rpl_semi_sync_master_enabled=ON;

 

#检查半同步复制相关参数设置

mysql> show variables like  '%semi%';

+-------------------------------------------+------------+

| Variable_name                             | Value      |

+-------------------------------------------+------------+

| rpl_semi_sync_master_enabled              | ON         |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

+-------------------------------------------+------------+

6 rows in set (0.01 sec)

 

2、slave端

#安装半同步复制插件

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

 

#打开slave端的半同步复制功能

mysql> set global rpl_semi_sync_slave_enabled=on;

Query OK, 0 rows affected (0.00 sec)

 

#检查半同步复制相关参数

mysql> show variables like '%semi%';

+-------------------------------------------+------------+

| Variable_name                             | Value      |

+-------------------------------------------+------------+

| rpl_semi_sync_slave_enabled               | ON         |

| rpl_semi_sync_slave_trace_level           | 32         |

+-------------------------------------------+------------+

2 rows in set (0.00 sec)

 

#开启slave复制线程并检查复制状态

mysql> start slave;

mysql> show slave status\G

 

4.2 半同步相关参数

rpl_semi_sync_master_enabled:

# 控制master端是否打开半同步插件,默认OFF  

 

rpl_semi_sync_master_timeout: 

#控制半同步复制退化为异步复制的时间限制。若该时间限制下master还未接收到slave的ack,半同步复制退化为异步复制。默认10000(10s),该参数一般会设置比较大,保证数据无损。 

 

rpl_semi_sync_master_trace_level:

#master半同步复制调试跟踪等级,默认为32。

1 = general level (for example, time function failures)

16 = detail level (more verbose information)

32 = net wait level (more information about network waits)

64 = function level (information about function entry and exit

 

rpl_semi_sync_master_wait_for_slave_count

#master提交事务并返回客户端commit时,需要获取slave的ack的个数,默认为1。该参数同样依赖rpl_semi_sync_master_wait_no_slave的设置  

 

rpl_semi_sync_master_wait_no_slave:

#控制当slave个数小于rpl_semi_sync_master_wait_for_slave_count参数设置时,复制模式的行为,默认为ON。

ON:当MySQL发现slave个数小于rpl_semi_sync_master_wait_for_slave_count时,MySQL复制模式不做任何变更,只要数据同步时,master接收到大于等于rpl_semi_sync_master_wait_for_slave_count个数的ack,MySQL就继续保持半同步复制模式; 若master等待ack超过rpl_semi_sync_master_timeout时间限制后仍然未接收到大于等于rpl_semi_sync_master_wait_for_slave_count个数的ack,MySQL就将半同步复制退化为异步复制。

    OFF:当MySQL发现slave个数小于rpl_semi_sync_master_wait_for_slave_count时,主动将半同步复制退化为异步复制

 

rpl_semi_sync_master_wait_point:

#控制半同步复制下,master提交事务并返回客户端commit的时机,MySQL5.7版本下默认为after_sync。


相关文章

MySQL 评估 ALTER TABLE 进度(5.7)

MySQL 评估 ALTER TABLE 进度(5.7)

一、前言问题:大表里执行 ALTER TABLE 的时候,经常会比较忐忑,会面临 “跑又跑不完 Kill 也不敢 Kill” 的窘境。需求:客户在执行 ALTER TABLE 时也会让我们来评估影响的...

ES运维(五)聚合分析流程及精准度

ES运维(五)聚合分析流程及精准度

1、 概述ES是一个近实时的搜索引擎,提供近实时海量数据的聚合分析功能,但这个海量数据聚合分析是会损失一定的精准度来满足实时性能需要的。 2、 分布式系统的近似统计算法如下图,在分布式数据分...

Elasticsearch查询优化

1 使用更快的硬件查询性能大部分场景下更多的在于IO能力,很多时候查询速度受限于磁盘IO能力,使用SSD会比旋转类存储介质好得多。如果查询类型属于计算比较多的,则可以考虑使用更快的CPU。2 为文件系...

SQL隐式转换导致索引失效_数据类型不一致

SQL隐式转换导致索引失效_数据类型不一致

2.数据类型不一致导致索引失效示例 SQL 如下,SQL 本身很简单,但通过查看执行计划可以发现,此时走的是主键索引,查看表结构发现表的 kemu 是有索引的,且过滤性相对较好。进一步核实,SQL 为...

docker私有仓库搭建及containerd使用私有仓库

docker私有仓库搭建及containerd使用私有仓库

这里我们要搭建的私有仓库非harbor,而是更轻量的docker-registry。使用的工具是containerd私有仓库搭建```Plain Text创建目录mkdir -p /opt/docke...

Ranger-hase插件部署

Ranger-hase插件部署

解压插件tar -zxf  ranger-2.3.0-hbase-plugin.tar.gz -C /opt修改配置vi install.properties 内容如下:POLICY_MGR_URL=...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。