MySQL数据库主从同步

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

MySQL数据库主从同步

 

环境描述

主数据库master  ip:192.168.1.205:3306

从数据库slave   ip:192.168.1.206:3306


源码安装Mysql-5.5.46请移步:http://linuxzkq.blog.51cto.com/9379412/1700082,这里不在描述

###############################################################################

配置步骤:

a.主数据库配置步骤

1、开启主数据库的binlog(二进制日志功能),并设置server-id

2、创建用于同步数据的账号rep

3、锁表并查看当前日志名称和位置(pos)

4、备份当前主数据库的全部数据(全备)

5、解锁主数据库,让主数据库继续提供服务

6、继续往主数据库写数据

 

b.从数据库配置步骤

1、把主数据库备份的全备数据恢复到从数据库

2、设置从数据库server-id,并确保这个ID没有被别的MySQL服务所使用。

3、在从数据库上设置主从同步的相关信息,如主数据库服务器的IP地址、端口号、同步账号、密码、binlog文件名、binlog位置(pos)点

4、开始主从同步start slave;

5、查看是否同步成功,show slavestatus\G;

############################################################################

 

 

 

主数据库配置:

##################################################################

开启主数据库的binlog(二进制日志功能),并设置server-id

[root@web1 ~]# vi  /etc/my.cnf

server-id       = 1

log-bin=mysql-bin

[root@web1 ~]# egrep "server-id|log-bin" /etc/my.cnf

server-id       = 1

log-bin=mysql-bin

################################################################## 

重启数据库

[root@web1 ~]# service mysqld restart

Shutting down MySQL.......... SUCCESS!

Starting MySQL.......... SUCCESS!

[root@web1 ~]# netstat -tunlp|grep mysqld

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      16530/mysqld 

[root@web1 ~]# lsof -i:3306

COMMAND   PID  USER  FD   TYPE DEVICE SIZE/OFF NODENAME

mysqld      16530 mysql 11u  IPv4  52627     0t0  TCP *:mysql (LISTEN)

################################################################## 

查看是否记录二进制日志

[root@web1 ~]# ll /application/data/mysql-bin.000001

-rw-rw----. 1 mysql mysql 2629 Oct  2 15:35 /application/data/mysql-bin.000001  #有此文件,证明在记录二进制日志

################################################################## 

主数据库中创建测试用的数据库和表

mysql> create database test;

Query OK, 1 row affected (0.02 sec)

mysql> use test;

Database changed

mysql> create table test(id int(3),namechar(10));

Query OK, 0 rows affected (0.14 sec)

mysql> insert into test values(001,'mytest');

Query OK, 1 row affected (0.14 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.02 sec)

################################################################## 

查看是否开启binlog(二进制日志功能)

mysql> show variables like 'log_bin';

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

| Variable_name | Value |

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

| log_bin     | ON   |

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

1 row in set (0.00 sec)

##################################################################  

创建用于同步数据的账号rep

mysql> grant replication slave on *.* to 'rep'@'192.168.1.%'identified by 'rep123456';

mysql> flush privileges;

mysql> select user,host from mysql.user;                

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

| user | host      |

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

| root | 127.0.0.1   |

| rep  | 192.168.1.% |

| root | localhost   |

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

3 rows in set (0.04 sec)

##################################################################

锁表

mysql> flush table withread lock; 

Query OK, 0 rows affected (0.00 sec)

##################################################################

查看当前二进制日志名称和位置(pos)

mysql> show master status;

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

| File         | Position | Binlog_Do_DB |Binlog_Ignore_DB |

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

| mysql-bin.000001 |    107 |         |             |

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

1 row in set (0.03 sec)

##################################################################

备份当前主数据库的数据

[root@web1 ~]# mysqldump-uroot  -p87003891214 -A -B -F--master-data=2 --events | gzip > /tmp/mysql_bak.$(date +%F).sql.gz 

[root@web1 ~]# ll /tmp

total 156

drwxrwxrwt. 2 tomcat tomcat   4096 Oct 2 09:33 hsperfdata_tomcat

-rw-r--r--. 1 root   root  151317 Oct  2 20:08mysql_bak.2015-10-02.sql.gz

-rwxrwxrwt. 1 root   root       0 Aug 13 11:55 yum.log

解锁主数据库

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

################################################################## 

 


从数据库配置:

######################################################

把主数据库备份的全备数据恢复到从数据库

 

[root@web1 ~]# scp /tmp/mysql_bak.2015-10-02.sql.gzroot@192.168.1.206:~

root@192.168.1.206's password:

mysql_bak.2015-10-02.sq 100% 148KB 147.8KB/s   00:00

[root@web2 ~]# ll mysql_bak.2015-10-02.sql.gz

-rw-r--r--. 1 root root 151317 Aug 19 07:37 mysql_bak.2015-10-02.sql.gz

[root@web2 ~]# gzip -d mysql_bak.2015-10-02.sql.gz

[root@web2 ~]# mysql -uroot -p87003891214 < mysql_bak.2015-10-02.sql

[root@web2 ~]# mysql -uroot -p87003891214 -e "showdatabases;"

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

| Database        |

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

| information_schema |

| mysql         |

| performance_schema |

| test          |

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

[root@web2 ~]# mysql -uroot -p87003891214 -e "usetest;select * from test;"       

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

| id   | name  |

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

|    1 | mytest|

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

###############################################################

设置从数据库server-id并确保这个ID没有被别的MySQL服务所使用

[root@web2 ~]# vi /etc/my.cnf

server-id       = 2

[root@web2 ~]# grep "server-id" /etc/my.cnf

server-id       = 2

##############################################################

在从数据库上设置主从同步的相关信息,如主数据库服务器的IP地址、端口号、同步账号、密码、binlog文件名、binlog位置(pos)

mysql> CHANGE MASTER TO

MASTER_HOST='192.168.1.205',

MASTER_PORT=3306,

MASTER_USER='rep',

MASTER_PASSWORD='rep123456',

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=107;

#############################################################

开始主从同步start slave

mysql> start slave;

查看是否同步成功,show slave status\G;

mysql> show  slavestatus\G;

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

Slave_IO_State: Waiting formaster to send event

Master_Host: 192.168.1.205

Master_User: rep

Master_Port: 3306

Connect_Retry: 60

Master_Log_File:mysql-bin.000008

Read_Master_Log_Pos: 107

Relay_Log_File:web2-relay-bin.000014

Relay_Log_Pos: 253

Relay_Master_Log_File:mysql-bin.000008

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 107

Relay_Log_Space: 451

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert:No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.01 sec)

 

ERROR:

No query specified

其中Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,代表主从同步成功了

#############################################################

继续往test表中插入数据

mysql> use test;

Database changed

mysql> insert into test values(002,'mytest2');

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into test values(003,'mytest3');

Query OK, 1 row affected (0.05 sec)

 

mysql> insert into test values(004,'mytest4');

Query OK, 1 row affected (0.04 sec)

 

查看从数据库的表

 

mysql> use test;

Database changed

mysql> select * from test;

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

| id   | name   |

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

|    1 | mytest |

|    2 | mytest2 |

|    3 | mytest3 |

|    4 | mytest4 |

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

4 rows in set (0.00 sec)

 本文转自 linuxzkq 51CTO博客,原文链接:http://blog.51cto.com/linuxzkq/1700094

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
304 0
|
3月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
4天前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
34 16
|
4月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
112 4
|
1月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
2月前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
57 3
|
2月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
34 1
|
3月前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
397 11
|
4月前
|
关系型数据库 MySQL Linux
mysql 主从同步 实现增量备份
【8月更文挑战第28天】mysql 主从同步 实现增量备份
62 3
|
4月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。