mysql 主从同步,双主同步,如果服务器意外挂机,不同步怎么办

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

mysql 主从同步,双主同步,如果服务器意外挂机,不同步怎么办

首先主从同步

master 192.168.0.21

slave 192.168.0.22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#my.cnf master 配置文件
[client]
port            = 3306
socket          =  /tmp/mysql .sock
default-character- set =utf8
[mysqld]
port            = 3306
socket          =  /tmp/mysql .sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
default-character- set =utf8
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log-bin=mysql-bin
binlog_format=mixed
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
default-character- set =utf8
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
server- id = 1   #增加3条配置
binlog- do -db=abc   #设置同步数据库,如果有多个数据库,每个数据库一行
binlog-ignore-db = mysql  #设置不要同步的数据库,如有多个数据库,每个数据库一行
log-bin  #日志文件

service mysql restart #重启数据库

1
2
3
4
5
6
7
8
9
进入mysql,创建一个数据库abc:
create database abc;
创建一个用来同步的用户,指定只能在192.168.0.22登录:
grant replication slave on *.* to  'root' @ '192.168.0.22' identified by  '123456' ;
mysql> use abc
Database changed
mysql> create table bb(idint, name varchar(20),age int);
Query OK, 0 rows affected (0.05 sec)
#注意表和数据库格式必须一样
1
2
3
4
5
6
7
#slave
mysql>  create database abc;
Query OK, 1 row affected (0.00 sec)
mysql> use abc
Database changed
mysql> create table bb(idint, name varchar(20),age int);
Query OK, 0 rows affected (0.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#slave
#my.cnf 配置
[client]
port            = 3306
socket          =  /tmp/mysql .sock
default-character- set =utf8
[mysqld]
port            = 3306
socket          =  /tmp/mysql .sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
default-character- set =utf8
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log-bin=mysql-bin
binlog_format=mixed
server- id = 2    #id
master-host=192.168.0.21   #mysql主ip地址
master-user=root    #授权用户
master-password=123456   #授权密码
master-port=3306     #mysql端口
master-connect-retry=30    #同步
replicate-ignore-db=mysql    #设置不要接收的数据库,如有多个数据库,每个数据库一行
replicate- do -db=abc   #设置要接收的数据库,如有多个数据库,每个数据库一行
log-bin
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
default-character- set =utf8
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#主上查看
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000025 |      377 | abc          |                  |
+------------------+----------+--------------+------------------+
1 row inset(0.00 sec)
# 记录下file和position的值
#slave 上
CHANGE MASTER TO MASTER_LOG_FILE= ' mysql-bin.000025' ,MASTER_LOG_POS=377;
# 根据master状态同步
mysql> slave start;
# 启动slave
mysql> show slave status\G;

发现报错信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.0.21
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:  mysql-bin.000025
Read_Master_Log_Pos: 377
Relay_Log_File: localhost-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:  mysql-bin.000025
Slave_IO_Running: No
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: 377
Relay_Log_Space: 106
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 2013
Last_IO_Error: error connecting to master  'root@192.168.0.21:330                                                                                                                                                             6' - retry- time : 60  retries: 86400
Last_SQL_Errno: 0
Last_SQL_Error:
1 row inset(0.00 sec)
ERROR:
No query specified


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
或者 vi /etc/sysconfig/iptables
-I INPUT -p tcp --dport 3360 -j DROP
-I INPUT -s 119.134.251.49 /32-p  tcp --dport 3306 -j ACCEPT
前面那个问题可能是防火墙问题,这次这个问题,是我以前以前同步过现在在做同步就报错了,给出解决方案。
[root@localhost ~] # service iptables stop
iptables:清除防火墙规则:                                 [确定]
iptables:将链设置为政策 ACCEPT:filter                    [确定]
iptables:正在卸载模块:                                   [确定]
[root@localhost ~] # mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection idis 7
Server version: 5.1.60-log Source distribution
Copyright (c) 2000, 2013, Oracle and /orits  affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and /orits
affiliates. Other names may be trademarks of their respective
owners.
Type  'help;' or  '\h' forhelp. Type  '\c' to clearthe current input statement.
mysql> slave stop;
Query OK, 0 rows affected (0.00 sec)
mysql> CHANGE MASTER TO MASTER_LOG_FILE= ' mysql-bin.000025' ,MASTER_LOG_POS=377;
Query OK, 0 rows affected (0.05 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.0.21
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:  mysql-bin.000025
Read_Master_Log_Pos: 377
Relay_Log_File: localhost-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:  mysql-bin.000025
Slave_IO_Running: No
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: 377
Relay_Log_Space: 106
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log:  'Could not find first log file name in binary log index file'
Last_SQL_Errno: 0
Last_SQL_Error:
1 row inset(0.00 sec)
ERROR:
No query specified


1
2
3
4
5
6
7
8
#第三个问题
[root@ceshi ~] # mysqlbinlog --start-position=377  /home/data/websrv/mysql/var/mysql-bin.000025
mysqlbinlog: unknown variable  'default-character-set=utf8'
解决:
[client]
port            = 3306
socket          =  /tmp/mysql .sock
#default-character-set=utf8


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@ceshi ~] # mysqlbinlog --start-position=377  /home/data/websrv/mysql/var/mysql-bin.000025
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#131115 22:52:33 server id 1  end_log_pos 106   Start: binlog v 4, server v 5.1.60-log created 131115 22:52:33 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
MTWGUg8BAAAAZgAAAGoAAAABAAQANS4xLjYwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAxNYZSEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;


看到上面 发现at4

然后我们这样配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# at 4
mysql> slave stop;
Query OK, 0 rows affected (0.00 sec)
mysql> CHANGE MASTER TO MASTER_HOST= '192.168.0.21' ,MASTER_PORT=3306,MASTER_USER= 'root' , MASTER_PASSWORD= '123456' ,master_log_file= 'mysql-bin.000025' ,master_log_pos=4;
Query OK, 0 rows affected (0.03 sec)
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting formaster to send event
Master_Host: 192.168.0.21
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000025
Read_Master_Log_Pos: 377
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 522
Relay_Master_Log_File: mysql-bin.000025
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: 377
Relay_Log_Space: 681
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:
1 row inset(0.00 sec)
ERROR:
No query specified
好了解决了 哈哈!这时我们导入数据测试!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
这是主数据
mysql> use abc;
Database changed
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| bb            |
+---------------+
1 row inset(0.00 sec)
mysql> insert into bb VALUES(1,2,3);
Query OK, 1 row affected (0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| bb            |
+---------------+
1 row inset(0.00 sec)
mysql>  select * from bb;
+------+------+------+
id | name | age  |
+------+------+------+
|    1 | 2    |    3 |
+------+------+------+
1 row inset(0.00 sec)
mysql> insert into bb VALUES(3,4,5);
Query OK, 1 row affected (0.00 sec)
mysql>  select * from bb;
+------+------+------+
id | name | age  |
+------+------+------+
|    1 | 2    |    3 |
|    3 | 4    |    5 |
+------+------+------+
2 rows inset(0.00 sec)
mysql>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
slave数据:
mysql> use abc;
Database changed
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| bb            |
+---------------+
1 row inset(0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| bb            |
+---------------+
1 row inset(0.00 sec)
mysql>  select * from bb;
+------+------+------+
id | name | age  |
+------+------+------+
|    1 | 2    |    3 |
+------+------+------+
1 row inset(0.00 sec)
mysql>  select * from bb;
+------+------+------+
id | name | age  |
+------+------+------+
|    1 | 2    |    3 |
|    3 | 4    |    5 |
+------+------+------+
2 rows inset(0.01 sec)


1
2
3
4
5
6
7
8
主清除数据
mysql> delete from bb;
Query OK, 2 rows affected (0.00 sec)
mysql>  select * from bb;
Empty  set (0.00 sec)
slave上
mysql>  select * from bb;
Empty  set (0.00 sec)

154257949.jpg

154301920.jpg

154304682.jpg

154306971.jpg


双主其实更简单

先授权

1
2
3
4
5
6
7
8
9
10
主:192.168.0.21
create database abc;
create table bb(idint, name varchar(20),age int);
grant replication slave on *.* to  'root' @ '192.168.0.22' identified by  '123456' ;
flush privileges;
主:192.168.0.22
create database abc;
create table bb(idint, name varchar(20),age int);
grant replication slave on *.* to  'root' @ '192.168.0.21' identified by  '123456' ;
flush privileges;

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
主:192.168.0.21
server- id = 1
binlog- do -db=abc
binlog-ignore-db = mysql
master-host=192.168.0.22
master-user=root
master-password=123456
master-port=3306
master-connect-retry=60
log-bin
主:192.168.0.22
server- id = 2
binlog-ignore-db = mysql
master-host=192.168.0.21
master-user=root
master-password=123456
master-port=3306
master-connect-retry=60
replicate- do -db=abc
binlog- do -db=abc
log-bin

然后重启

因为我的真实环境是主从,这里只测试了主从,双同步一样的道理,只是把主从反过来而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
#添加开机启动项 然后开机也同步测试
[root@localhost ~] # vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
modprobe ip_conntrack
/usr/local/nagios/bin/nrpe-c  /usr/local/nagios/etc/nrpe .cfg -d
service php-fpm start
/usr/bin/memcachedstart
service mysql restart

注意开机后防火墙端口一定要允许访问3306 否则则不同步!!!!!

160459108.jpg


本文转自 cs312779641 51CTO博客,原文链接:http://blog.51cto.com/chenhao6/1325247


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
49 3
|
2月前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
405 18
|
3月前
|
关系型数据库 MySQL 网络安全
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
这篇文章提供了解决Navicat无法连接腾讯云服务器上MySQL问题的步骤,包括调整防火墙设置、更新MySQL权限和检查远程连接配置。
有关使用Navicat 无法成功连接腾讯云服务器上Mysql的问题解决
|
3月前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
3月前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
32 2
|
3月前
|
SQL Ubuntu 关系型数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
44 0
|
3月前
|
关系型数据库 MySQL 网络安全
MySQL⭐二、使用Navicat连接到服务器上的MySQL
MySQL⭐二、使用Navicat连接到服务器上的MySQL
|
21天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
55 3
Mysql(4)—数据库索引
|
6天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
41 2
|
9天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
43 4

热门文章

最新文章