MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken
前言
随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制。
演示:实现mysql主从复制
配置主节点
1.修改主节点配置文件
...
#binlog
#binlog_format = STATEMENT
binlog_format = row <<主从节点保持一致,要么都是row,要么都是mixed
server-id = 1003306 <<主从节点的server_id必须保证不能一致
log-bin = /data/mysql/mysql3306/logs/mysql-bin <<定义二进制日志文件保存文件和格式
binlog_cache_size = 4M
max_binlog_size = 256M
max_binlog_cache_size = 1M
sync_binlog =
expire_logs_days =
#procedure
log_bin_trust_function_creators= ...
2.重启mysql
[root@ken home]# mysqladmin -uroot -pxx shutdown
[root@ken home]# mysqld &
[root@ken home]# ss -tnl | grep
LISTEN ::: :::*
3.主节点上授权具有复制权限的用户
[root@ken home]# mysql -uroot -p <<登录mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.7.-log MySQL Community Server (GPL) Copyright (c) , , 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> grant replication slave on *.* to ken@'%' identified by 'xx'; <<创建ken用户,并设置密码xx
配置从节点
1.修改从节点和主机点时间同步
可以使用NTP服务或者date直接设置。此步省略。
2.修改丛节点配置文件
...
#binlog
#binlog_format = STATEMENT
binlog_format = row <<主从节点保持一致,要么都是row,要么都是mixed
server-id = <<主从节点的server_id必须保证不能一致
log-bin = /data/mysql/mysql3306/logs/mysql-bin <<定义二进制日志文件保存文件和格式
binlog_cache_size = 4M
max_binlog_size = 256M
max_binlog_cache_size = 1M
sync_binlog =
expire_logs_days =
#procedure
log_bin_trust_function_creators= ...
3.重启mysql
[root@ken home]# mysqladmin -uroot -pxx shutdown
[root@ken home]# mysqld &
[root@ken home]# ss -tnl | grep
LISTEN ::: :::*
4.连接主服务器
链接主服务器命令详解
格式:CHANGE MASTER TO 选项
选项:
MASTER_HOST = 'host_name' 指定主服务的ip或者主机名
MASTER_USER = 'user_name' 指定主服务器的用户名
MASTER_PASSWORD = 'password' 指定用户名的密码
MASTER_PORT = port_num 指定连接的端口,默认是3306
MASTER_CONNECT_RETRY = interval 指定连接失败的时候的重试间隔时间
MySQL [(none)]> change master to master_host='10.220.5.137',master_user='root',master_password='xx'
5.启动 从节点
MySQL [(none)]> start salve;
6.查看从节点链接状态
主要看IO以及SQL线程是否启动
MySQL [(none)]> show slave status\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.220.5.137
Master_User: root
Master_Port:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes <<<IO线程启动成功
Slave_SQL_Running: Yes <<<SQL线程启动成功
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno:
Last_Error:
Skip_Counter:
Exec_Master_Log_Pos:
Relay_Log_Space:
Until_Condition: None
Until_Log_File:
Until_Log_Pos:
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno:
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id:
Master_UUID: e2357094-d6d9-11e8-ba06-000c292218ec
Master_Info_File: /data/mysql/mysql3306/data/master.info
SQL_Delay:
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count:
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 2a88f089-cd97-11e8-a862-000c29492f7b:-
Auto_Position:
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
row in set (0.00 sec)
7.测试
在主服务器端建库建表,查看从服务器端是否同步
主服务器建库建表
mysql> create database ken; <<创建数据库ken
Query OK, row affected (0.00 sec) mysql> use ken; <<进入数据库
Database changed
mysql> create table ken1 as select * from jobs.teachers; <<创建ken1表
Query OK, rows affected (0.04 sec)
Records: Duplicates: Warnings: mysql> select * from ken1; <<查看ken1表数据
+-----+------------+-----+--------+
| TID | Name | Age | Gender |
+-----+------------+-----+--------+
| | Song Jiang | | M |
| | ken | | M |
| | ken | | M |
| | hah | | M |
| | ken2 | | M |
| | ken2 | | M |
+-----+------------+-----+--------+
rows in set (0.00 sec)
8.检查从服务器
MySQL [(none)]> show databases; <<查看数据库,已经同步过来ken
+--------------------+
| Database |
+--------------------+
| information_schema |
| jobs |
| ken |
| liu |
| mysql |
| performance_schema |
| sys |
| test |
| test5 |
+--------------------+
rows in set (0.00 sec) MySQL [(none)]> use ken; <<进入到ken数据库中
Database changed
MySQL [ken]> show tables; <<查看库中的表,可以看到ken1表
+---------------+
| Tables_in_ken |
+---------------+
| ken1 |
+---------------+
row in set (0.00 sec) MySQL [ken]> select * from ken1; <<检查ken1表中的数据完整
+-----+------------+-----+--------+
| TID | Name | Age | Gender |
+-----+------------+-----+--------+
| | Song Jiang | | M |
| | ken | | M |
| | ken | | M |
| | hah | | M |
| | ken2 | | M |
| | ken2 | | M |
+-----+------------+-----+--------+
rows in set (0.00 sec)
到这里主从复制的演示就结束了,接下来再演示一个慢同步的架构
演示:实现mysql慢同步演示
半同步:N多个从节点中,只要任意一个从节点给主节点返回信息告知自己已经将数据存储成功,那么主节点会立刻给客户端反向执行结果信息。
配置主节点
1.安装主模块
mysql> install plugin rpl_semi_sync_master soname "semisync_master.so";
2.查看主端有关semi的变量
mysql> show global variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | |
| rpl_semi_sync_master_trace_level | |
| rpl_semi_sync_master_wait_for_slave_count | |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
rows in set (0.02 sec)
3.启动rpl_semi_sync_master_enabled
mysql> set global rpl_semi_sync_master_enabled=1;
4.安装从模块
mysql> install plugin rpl_semi_sync_slave soname "semisync_slave.so";
5.启动rpl_semi_sync_slave_enabled
mysql> set global rpl_semi_sync_slave_enabled=1;
6.重启从端slave
MySQL [ken]> stop slave;
MySQL [ken]> start slave;
7.查看IO/SQL启动状态
MySQL [ken]> show slave status\G
*************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.220.5.137
Master_User: root
Master_Port:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes <<IO线程启动成功
Slave_SQL_Running: Yes <<SQL线程启动成功
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno:
Last_Error:
Skip_Counter:
Exec_Master_Log_Pos:
Relay_Log_Space:
Until_Condition: None
Until_Log_File:
Until_Log_Pos:
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno:
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id:
Master_UUID: e2357094-d6d9-11e8-ba06-000c292218ec
Master_Info_File: /data/mysql/mysql3306/data/master.info
SQL_Delay:
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count:
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 2a88f089-cd97-11e8-a862-000c29492f7b:-
Auto_Position:
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
row in set (0.00 sec)
8.测试
略。详情见上主从复制。
MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken的更多相关文章
- MySQL系列详解八:MySQL多线程复制演示-技术流ken
前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...
- MySQL系列详解三:MySQL中各类日志详解-技术流ken
前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...
- MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken
xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...
- MySQL系列详解一:MySQL&&多实例安装-技术流ken
简介 MySQL是一个真正的多用户.多线程SQL数据库服务器.SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储.更新和存取信息更加容易.MySQL是一个客户机/服务器结构的实现 ...
- [数据库事务与锁]详解六: MySQL中的共享锁与排他锁
注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大 ...
- MySQL系列详解十:MySQL多源复制演示-技术流ken
前言 多源复制即多主一从结构,多个主服务器端的数据都会同步到后端一个从服务器上面.至于为什么要做多源复制下面的总结很到位. 1.灾备作用:将各个库汇总在一起,就算是其他库都挂了(整个机房都无法连接了) ...
- MySQL系列详解九:MySQL级联复制演示-技术流ken
前言 级联复制就是master服务器,只给后端一台slave服务器同步数据,然后这个slave服务器在向后端的所有slave服务器同步数据,这样就可以降低master服务器的写压力,和复制数据的网络I ...
- MySQL系列详解七:MySQL双主架构演示-技术流ken
前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mys ...
- MySQL系列详解四:MySQL事务-技术流ken
MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...
随机推荐
- FreeRTOS学习目录
1.关于实时操作系统的一些概念性问题 2.freeRTOS与裸机程序相比有什么区别?? 3.freeRTOSConfig.h文件对FreeRTOS进行系统配置 4.FreeRTOS的内存管理
- Reader和Writer
- swarm集群日常部分操作
docker swarm: 1)查看集群使用docker info 或 docker node ls 查看集群中的相关信息 2)swarm集群中node的availability状态可以为 activ ...
- Docker基础知识介绍
本节内容 1. Docker概述 2. Docker的安装 3. Docker基本使用 4. Docker相关命令汇总 5. Docker概念理解 一 Docker概述 Docker是什么 ...
- .Net程序员 初学Ubuntu ,配置Nignix
1.安装VM虚拟机 2.升级VI编辑器 3.安装Nginx 4.测试localhost 5.编辑配置文件 仅仅用了记录一个过程,不会太详细 1.安装虚拟机,网上一大片,不是特别难 2.为什么要升级VI ...
- SpringMVC框架二:SpringMVC与MyBatis整合
下面整合SpringMVC和MyBatis框架,并做一个小案例 创建数据库springmvc,并创建两张表,加入一些数据: 两张表:商品表,用户表 CREATE DATABASE springmvc; ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- MySQL:数据库表的空间回收
1. 表数据的存储方式 表数据既可以存储在共享表空间,也可以时单独的文件.这个行为由参数 innodb_file_per_table 控制: 设置为 OFF 时,表示表数据存储在共享表空间: 设置为 ...
- 导出到word
导出到excel功能会常做,但是导出到word功能很少做,项目遇到,在这里做一下标记. 导出到excel比较容易,excel都有固定格式也模板,但是word需要自己写模板,这里用了freemarker ...
- 向github提交代码不用输入帐号密码
解决方案:方案一: 在你的用户目录下新建一个文本文件.git-credentials Windows:C:/Users/username Mac OS X: /Users/username Linux ...