mysql互为主从怎么不冲突_Mysql互为主从问题

我搭建的是mysql 互为主从 复制

两台机器的mysql环境完全相同

第一部分测试:

B为master  A为slave的同步测试

在B上创建表lian,并插入数据

mysql> create table lian (a int,b char(10));

mysql> insert into lian (a,b)values(22,‘hahah‘);

mysql> show tables;

+—————-+

| Tables_in_test |

+—————-+

| lian           |

+—————-+

mysql> select * from lian;

+——+——-+

| a    | b     |

+——+——-+

|   22 | hahah |

+——+——-+

查看一下master-B的binlog日志,查看以上操作是否记录了日志:

cat mysql-bin.000002

.?Nh?@stdtestcreate table lian (a int,b char(10))Nl>@stdtestinsert into lian (a,b)values(22,‘hahah‘)

现在查看slave-A的relay日志,发现日志已经同步了

[root@XKWB5510 var]# cat XKWB5510-relay-bin.000003

.?Nh?@stdtestcreate table lian (a int,b char(10))Nl>@stdtestinsert into lian (a,b)values(22,‘hahah‘)

再在slave-A上看一下数据库是不是存在lian这个表:

mysql> use test;

Database changed

mysql> show tables;

+—————-+

| Tables_in_test |

+—————-+

| aniya          |

| lian           |

+—————-+

2 rows in set (0.00 sec)

现在说明数据B A 主 从 同步成功

—————————————————————————

第二部分测试:

A为master  B为slave的同步测试

在A上创建表From246,并插入数据

mysql> use test;

mysql> show tables;

+—————-+

| Tables_in_test |

+—————-+

| A246           |

| aniya          |

| lian           |

+—————-+

3 rows in set (0.00 sec)

mysql> create table From246(Name varchar(255),Sex varchar(255),Age int(10));

mysql> show tables;

+—————-+

| Tables_in_test |

+—————-+

| A246           |

| From246        |

| aniya          |

| lian           |

+—————-+

4 rows in set (0.00 sec)

mysql> insert into From246 (Name,Sex,Age)values(‘Zhaoyj‘,‘Girl‘,24);

mysql> select * from From246;

+——–+——+——+

| Name   | Sex  | Age  |

+——–+——+——+

| Zhaoyj | Girl |   24 |

+——–+——+——+

1 row in set (0.00 sec)

查看master-A的binlog日志,证明上述操作成功

[root@XKWB5510 var]# tail -1  mysql-bin.000002

testcreate table From246(Name varchar(255),Sex varchar(255),Age int(10))?N?R@stdtestinsert into From246 (Name,Sex,Age)values(‘Zhaoyj‘,‘Girl‘,24)

查看master-A的日志状态

[root@XKWB5510 var]# /usr/local/mysql/bin/mysqlbinlog mysql-bin.000003 |tail -15

;

# at 702

#110926 14:01:51 server id 1  end_log_pos 838  Query thread_id=5 exec_time=0 error_code=0

SET TIMESTAMP=1317016911;

create table From246(Name varchar(255),Sex varchar(255),Age int(10))

;

# at 838

#110926 14:02:05 server id 1  end_log_pos 966  Query thread_id=5 exec_time=0 error_code=0

SET TIMESTAMP=1317016925;

insert into From246 (Name,Sex,Age)values(‘Zhaoyj‘,‘Girl‘,24)

;

DELIMITER ;

# End of log file

ROLLBACK ;

;

create table From246(Name varchar(255),Sex varchar(255),Age int(10))

;

# at 853

#110926 14:02:05 server id 1  end_log_pos 966  Query thread_id=5 exec_time=0 error_code=0

SET TIMESTAMP=1317016925;

insert into From246 (Name,Sex,Age)values(‘Zhaoyj‘,‘Girl‘,24)

;

DELIMITER ;

# End of log file

ROLLBACK ;

/*!50003 SET ;

但是数据却没有插入到relay-B的

> show tables;

+—————-+

| Tables_in_test |

+—————-+

| lian           |

+—————-+

1 row in set (0.00 sec)

当我删除master-A上的表时,relay-B日志也同步了

[root@XKWB5705 var]# tail -4 XKWB5705-relay-bin.000005

NS?@stdtestdrop table A246NT@stdtestdrop table aniyaNSd@stdtestdrop table lianNV?@stdtestdrop table From246

这是什么奇怪问题 ??

——————————————————————————

问题排查:

首先在Master-A上用

show processlist; 查看下进程是否Sleep太多。发现很正常

show master status; 也正常

再跑到Slave上查看 show slave status; 也正常

当我手动从A导入B数据时,发现一个问题:

mysql> load table From246 from master;

ERROR 1115 (42000): Unknown character set: ‘gbk‘

怀疑:难道是因为字符串的问题导致AB主从复制失败 ?

通过show character set 命令查看到

master-A有gbk字符集而slave-B没有

mysql> show character set;

+———-+—————————–+———————+——–+

| Charset  | Description                 | Default collation   | Maxlen |

+———-+—————————–+———————+——–+

| dec8     | DEC West European           | dec8_swedish_ci     |      1 |

| cp850    | DOS West European           | cp850_general_ci    |      1 |

| hp8      | HP West European            | hp8_english_ci      |      1 |

| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |

| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |

| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |

| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |

| ascii    | US ASCII                    | ascii_general_ci    |      1 |

| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |

| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |

| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |

| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |

| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |

| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |

| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |

| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |

| cp866    | DOS Russian                 | cp866_general_ci    |      1 |

| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |

| macce    | Mac Central European        | macce_general_ci    |      1 |

| macroman | Mac West European           | macroman_general_ci |      1 |

| cp852    | DOS Central European        | cp852_general_ci    |      1 |

| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |

| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |

| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |

| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |

| binary   | Binary pseudo charset       | binary              |      1 |

| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |

+———-+—————————–+———————+——–+

27 rows in set (0.00 sec)

那现在应该是在启动mysql的时候统一他们的字符集

master-A : [root@XKWB5510 var]# /usr/local/mysql/bin/mysqld_safe –default-character-set=latin1 &

slave-B   : [root@XKWB5705 var]# /usr/local/mysql/bin/mysqld_safe –default-character-set=latin1 &

再次在B上从A导入数据:

mysql> show tables;

Empty set (0.00 sec)

mysql> load table From246 from master;

Query OK, 0 rows affected (0.01 sec)

mysql> show tables;

+—————-+

| Tables_in_test |

+—————-+

| From246        |

+—————-+

1 row in set (0.00 sec)

现在字符集的问题解决了

—————————————————————

现在手动启动一下“将日志应用于数据库”的线程:SLAVE start SQL_THREAD

和“把master段的日志写到本地”的线程:SLAVE start IO_THREAD

发现同步数据还是失败,那说明不是线程的问题

如果发现 Seconds_Behind_Master 为 (null)

解决:

stop slave;

set global sql_slave_skip_counter=1 ;

start slave;

之后Slave会和Master去同步 主要看Seconds_Behind_Master是否为0,直到为0时就已经同步了。。

———————————–

slave B机器上master.info信息,与master A上的信息是否是同步的

mater A:

mysql> show master status\G;

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

File: mysql-bin.000004

Position: 808

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

slave B:

[root@XKWB5705 var]# cat master.info

15

mysql-bin.000004

808

211.100.97.246

repl2

123456

3306

60

0

从以上可以看到是同步的

作者“ANLJF的专栏”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 8支持多种主从复制拓扑结构,如单主从、双主互为主从、环形拓扑等。以下是实现双主互为主从的步骤: 1. 安装MySQL 8服务器 在两台服务器上分别安装MySQL 8服务器,并确保服务器版本一致。 2. 配置主服务器 在其中一台服务器上配置主服务器,步骤如下: - 修改MySQL配置文件my.cnf,增加以下内容: ``` [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=test ``` 其中,server-id为服务器唯一标识,必须在不同服务器上设置不同的值;log-bin表示启用二进制日志;binlog-do-db表示只记录指定的数据库操作。 - 重启MySQL服务。 - 创建用于主从复制的用户并授权。 ``` CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; ``` 其中,repl为复制用户,password为密码。 - 查看主服务器状态并记录以下信息: ``` SHOW MASTER STATUS; ``` 记录File和Position字段的值,用于配置从服务器。 3. 配置从服务器 在另一台服务器上配置从服务器,步骤如下: - 修改MySQL配置文件my.cnf,增加以下内容: ``` [mysqld] server-id=2 log-bin=mysql-bin binlog-do-db=test ``` 其中,server-id为服务器唯一标识,必须在不同服务器上设置不同的值;log-bin表示启用二进制日志;binlog-do-db表示只记录指定的数据库操作。 - 重启MySQL服务。 - 启动主从复制并指定主服务器信息。 ``` CHANGE MASTER TO MASTER_HOST='主服务器IP地址', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='上一步中记录的File字段值', MASTER_LOG_POS=上一步中记录的Position字段值; START SLAVE; ``` 其中,主服务器IP地址为主服务器的IP地址,repl和password为主服务器的复制用户和密码,MASTER_LOG_FILE和MASTER_LOG_POS为上一步中记录的值。 - 查看从服务器状态并确保复制已启动。 ``` SHOW SLAVE STATUS\G ``` 如果复制已启动,Slave_IO_Running和Slave_SQL_Running字段的值将为Yes。 4. 配置双主互为主从 以上步骤实现了单向主从复制,要实现双向主从复制,需要在另一台服务器上重复以上步骤,并将主从角色互换,即将原来的从服务器配置为主服务器,原来的主服务器配置为从服务器。在配置时需要注意以下几点: - 在配置第二个主服务器时,server-id必须设置为不同于第一个主服务器的值。 - 在配置第二个从服务器时,需要将MASTER_HOST设置为第二个主服务器的IP地址。 - 在主从切换时,需要先停止原来的复制,再将两个服务器的数据同步,最后启动新的复制。 双主互为主从复制可以实现数据的双向同步,但也存在数据冲突和数据丢失的风险,需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值