【问题标题】:Google Cloud MySQL and Master-master replication谷歌云 MySQL 和主-主复制
【发布时间】:2017-11-09 14:22:01
【问题描述】:

我在不同地区有两台服务器(euus)连接到同一个 mysql 数据库,我已经开始使用 google cloud sql 第二代,但它仅在 us 地区可用。

这个想法是在新区域eu 中添加第二个 sql 节点,但我找不到任何有关 Master-Master 复制的文档,因此目前不支持。它是否正确?

ps。我的两台服务器都需要读/写权限。

使用我在us 中的可操作的google sql,我可以:

  1. 我在eu中创建了一个新的google sql cloud。

  2. eu 配置为us 的外部副本。

  3. eu 配置为us 的外部主控。

我真的很困惑!任何帮助将不胜感激。

/乌斯

【问题讨论】:

  • Google 拥有名为 cloud-spanner 的 SQL 式复制数据库
  • 我想我会用扳手来做,它并不便宜,但让我们看看,我会根据我的反馈更新这个问题,谢谢 midor
  • 如果您知道如何进行设置,总有可能使用容器或虚拟机作为服务
  • 我很想知道它对你的影响。你会在某个时候添加反馈吗?
  • 感谢您的信息。办公室。这样可行;一开始就有点违背了使用 Cloud SQL 的目的。

标签: mysql replication google-cloud-sql multi-master-replication


【解决方案1】:

Google Cloud SQL 不支持 Master-Master。

【讨论】:

  • 是的,我注意到了,但我问的是解决方法或想法,有人在云端做过吗?我应该安装我自己的mysql服务器并自己做吗...
  • 我非常怀疑是否有解决方法。即使有,也不会被支持,因此可能随时中断。我建议你退后一步,想想你真正想要归档的是什么。传统SQL数据库中的master-master并不是灵丹妙药,存在很多问题。如果你真的需要多区域一致的数据库,看看 Spanner。
【解决方案2】:

解决方案来自: https://www.ryadel.com/en/mysql-master-master-replication-setup-in-5-easy-steps/

在谷歌云平台Linux Ubuntu 16.04上成功实现 MySql 5.7 将无法在 Debian 上加载。

/// 在 2 个虚拟机上安装 MySQL

A.在 VM sql1 和 sql2 上

apt update
apt install mysql-server -y

P@ssW0rd2020    P@ssW0rd2020

B.注释 bind-address 以允许全局访问

cd /etc/mysql/mysql.conf.d/

nano /etc/mysql/mysql.conf.d/mysqld.cnf

C.重启 MySQL 服务(cnf 改变)

systemctl restart mysql
systemctl status mysql

D.在 sql1 上

nano /etc/mysql/conf.d/mysql.cnf

[mysqld]   // note: not [mysql]

server-id=1
log-bin="mysql-bin"
binlog-ignore-db=test
binlog-ignore-db=information_schema
replicate-ignore-db=test
replicate-ignore-db=information_schema
relay-log="mysql-relay-log"
auto-increment-increment = 2
auto-increment-offset = 1

-------------------------------------

systemctl restart mysql
systemctl status mysql

D.在 sql2 上

nano /etc/mysql/conf.d/mysql.cnf

[mysqld]

server-id=2
log-bin="mysql-bin"
binlog-ignore-db=test
binlog-ignore-db=information_schema
replicate-ignore-db=test
replicate-ignore-db=information_schema
relay-log="mysql-relay-log"
auto-increment-increment = 2
auto-increment-offset = 2

-------------------------------------

systemctl restart mysql (THIS WILL CREATE BIN LOG)
systemctl status mysql

again, flush privileges; ---supposed to 

E.创建复制器用户

  • 在 sql1 和 2 上配置(复制器密码可以相同,也可以不同)

    mysql -u root -p

    P@ssW0rd2020

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'P@ssW0rd2020'; 将 . 上的复制奴隶授予 'replicator'@'%' 由 'P@ssW0rd2020' 识别; 刷新权限;

F。从没有数据库的新虚拟机开始(更好)或将数据库相互导入/导出到 sql1 和 2 https://dev.mysql.com/doc/refman/8.0/en/copying-databases.html

G.配置从 sql1 到 sql2 的复制 (使 sql2 成为 sql1 的从属)

  • 在 sql1 上

    显示主状态;

    示例输出: +------------------+---------+--------------+---- --------------+ |文件 |职位 | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+---------+--------------+---- --------------+ | mysql-bin.000001 | 448 |示例 |测试、信息| +------------------+---------+--------------+---- --------------+ 一组中的 1 行(0.00 秒)

    • 注意“文件”和“位置”值
  • 在 sql2 上

    停止奴隶; 将 MASTER 更改为 MASTER_HOST = '104.154.225.215', MASTER_USER = 'replicator', MASTER_PASSWORD = 'P@ssW0rd2020', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 448; 启动奴隶; 刷新权限;

H.对 sql2 重复(使 sql1 成为 sql2 的从属)

  • 在 sql2 上

    显示主状态;

    示例输出: +------------------+---------+--------------+---- --------------+ |文件 |职位 | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+---------+--------------+---- --------------+ | mysql-bin.000001 | 448 |示例 |测试、信息| +------------------+---------+--------------+---- --------------+ 一组中的 1 行(0.00 秒)

    • 注意“文件”和“位置”值
  • 在 sql1 上

    停止奴隶; 将 MASTER 更改为 MASTER_HOST = '35.198.195.130', MASTER_USER = 'replicator', MASTER_PASSWORD = 'P@ssW0rd2020', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 448; 启动奴隶;

我。测试复制

  • 在 sql1 上创建一个数据库,它将在 sql2 上复制,反之亦然。
  • 在 sql2 上创建一个数据库,它将在 sql1 上复制,反之亦然。

成功是甜蜜的! ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多