mysql 5.7 多源_MySQL5.7下多源复制知识要点(原创)

主master1    IP: 192.168.1.116     PORT: 3306

主master2    IP: 192.168.1.116     PORT: 3307

从slave        IP: 192.168.1.200     PORT: 3306

两主为全新安装。如果以前安装过的话,可以将原来的数据库删除掉,再执行 reset master即可。(否则需要将两个主的想着库表使用 mysqldump到从中)

[master1 3306] my.cnf

[client]

port=3306

socket=/data/mysql/mysql3306/tmp/mysql.sock

[mysqld]

basedir=/data/mysql/mysql3306

datadir=/data/mysql/mysql3306/datadir

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

socket=/data/mysql/mysql3306/tmp/mysql.sock

port=3306

log-bin=mysql-bin

binlog-format=row

# 二进制日志的格式:有row、statement和mixed三种

# 注:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致; 推荐使用 row

server-id=1

# 设置server_id,一般建议设置为IP,或者再加一些数字,如端口号[在以前版本为server-id]

#gtid

gtid-mode=on

enforce-gtid-consistency=1

log-slave-updates=true

skip_slave_start=1

# log-slave-updates/gtid-mode/enforce-gtid-consistency/report-port/report-host:用于启动GTID及满足附属的其它需求[其中启动GTID必须同时设置gtid-mode/enforce-gtid-consistency/]

master-info-repository=TABLE

relay-log-info-repository=TABLE

# master-info-repository/relay-log-info-repository都设置为TABLE,mysql.slave_master_info与 mysql.slave_relay_log_info 中,table都是innodb类型的,支持事务,比文件安全

# 默认值是FILE, 比如master info就保存在master.info文件中,relay log info保存在relay-log.info文件中,如果服务器意外关闭,正确的relay info 没有来得及更新到 relay-log.info文件,这样会造成数据丢失

sync-master-info=1

# 启用之后,使binlog在每N次binlog写入后与硬盘 同步

slave-parallel-workers=4

# 开启基于库的多线程复制.默认是0,不开启,最大并发数为1024个线程

#binlog-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

#binlog-ignore-db=不需要复制的数据库苦命,如果复制多个数据库,重复设置这个选项即可

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security r

isks

symbolic-links=0

[mysqld_safe]

log-error=/data/mysql/mysql3306/log/mysqld.log

pid-file=/data/mysql/mysql3306/mysqld.pid

对于另一个主master2(3307)的配置文件 my.cnf 与上面差不多 ,只需要将相应的3306字眼修改为3307即可,记得修改server-id=2。

在两个主上执行授权

grant replication slave on *.* to repl@’192.168.1.%’ identified by ‘repl123’;

对于从服务器,配置和上面的差不多。

由于我们这里是多源配置,所以要求两台主数据库的名称不能一致,还有一些授权数据库名(mysql),所以这里我们需要将slave中的mysql数据库忽略掉,需要在my.cnf中添加

binlog-do-db=test

binlog-ignore-db=mysql

#replicate-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

#replicate-ignore-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

============================================

待主从配置全部配置完以后,在slave中执行

change master to master_host=’192.168.1.116′,master_user=’repl’,master_password=’repl123′,master_port=3306,master_auto_position=1for channel ‘master-3306’;

change master to master_host=’192.168.1.116′,master_user=’repl’,master_password=’repl123′,master_port=3307,master_auto_position=1 for channel ‘master-3307’;

启用复制

start slave;

show slave status\G;

如果看到两个源的IO/SQL THREAD状态全部为 YES ,则说明配置成功。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

=======================

常见问题:

有时候会产生复制错误,如一些sql语句语句冲突,这个时候只需要跳过去那个事务即可(通过提交一个空事务)

stop slave sql_thread;

set gtid_next=’uuid:N’;

begin;commit;

set gtid_next=’automatic’;

start slave sql_thread:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7中,没有内置的ROW_NUMBER()函数来实现行号的功能。但是,你可以使用变量来模拟ROW_NUMBER()函数的行为。下面是一个示例SQL语句,可以在MySQL 5.7中实现类似ROW_NUMBER()的功能: ``` SELECT @rownum := @rownum + 1 AS rownum, b.id, b.update_time, IF(@mno = b.id OR (@mno IS NULL AND b.id IS NULL), @rank := @rank + 1, @rank := 1) AS row_number FROM (SELECT * FROM table ORDER BY id, update_time DESC) b, (SELECT @rownum := 0, @rank := 0, @mno := NULL) r WHERE row_number = 1; ``` 这个查询语句使用了变量`@rownum`和`@rank`来模拟ROW_NUMBER()函数的行为。首先,我们通过子查询将变量初始化为0。然后,在外部查询中,我们使用`@rownum`变量来计算行号,并使用`@rank`变量来计算每个id的排名。最后,我们通过WHERE子句选择排名为1的行。 请注意,这只是一种在MySQL 5.7中模拟ROW_NUMBER()函数的方法,并不是官方支持的方法。如果你需要更高级的窗口函数功能,建议升级到MySQL 8.0或更高版本。 #### 引用[.reference_title] - *1* *2* *3* [mysql5.7实现ROW_NUMBER() OVER(PARTITION BY XXX)功能查询](https://blog.csdn.net/shen_xbo/article/details/120451733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值