测试mysql8.0可行 8.4翻车 其他遇到了腾讯云两台不同地区的连不上 但是跟其他的服务商的连上了 宝塔里的那个插件就差不多是这个方法 学会后使用过后发现 实际作用还是不太给力 听了别人的方案 数据库还是老老实实单独拿一台来搞吧 或者买同地区的大厂的服务器走内网传输 只要是走内网 效果就不错 不同地区的服务器远程数据库互相连接 也始终有延迟 暂时放弃使用了

我们要在两台云服务器上设置 MySQL 主从同步。主服务器上的数据更改(如新增、删除)会自动同步到从服务器。

准备工作

  1. 确保你有两台服务器:假设它们的 IP 地址分别是 主服务器IP从服务器IP
  2. 确保你有 SSH 访问权限:你需要能够通过 SSH 登录到这两台服务器。
  3. 确保 MySQL 已安装:两台服务器上都需要安装 MySQL 8.0。

步骤 1:配置主服务器

1. 登录到主服务器

使用 SSH 登录到主服务器。打开终端(Terminal)并输入:

ssh your_username@主服务器IP

your_username 替换为你的用户名,主服务器IP 替换为主服务器的实际 IP 地址。

2. 编辑 MySQL 配置文件

找到 MySQL 的配置文件 my.cnf。通常这个文件位于 /etc/my.cnf/etc/mysql/my.cnf。使用以下命令打开文件:

sudo nano /etc/my.cnf

如果你使用的是其他编辑器(如 vim),可以替换 nano 为你喜欢的编辑器。

在文件中找到 [mysqld] 部分,添加以下内容:

[mysqld]
server-id = 1  # 主服务器的唯一 ID
log_bin = /var/log/mysql/mysql-bin.log  # 启用二进制日志
binlog_do_db = your_database_name  # 需要同步的数据库名称
  • server-id:每个 MySQL 服务器必须有一个唯一的 ID。主服务器设置为 1。
  • log_bin:启用二进制日志,MySQL 会记录所有更改。
  • binlog_do_db:指定需要同步的数据库名称,替换为你实际使用的数据库名称。

3. 重启 MySQL 服务

保存并关闭文件后,重启 MySQL 服务以使配置生效:

sudo systemctl restart mysql

4. 创建复制用户

登录到 MySQL:

mysql -u root -p

输入你的 MySQL root 密码后,执行以下命令创建一个用于复制的用户:

CREATE USER 'typecho'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'typecho'@'%';
FLUSH PRIVILEGES;
  • typecho:这是复制用户的名称,可以自行更改。
  • your_password:为该用户设置的密码,记住这个密码,因为稍后会用到。

5. 获取主服务器的二进制日志位置

运行以下命令,记录下 FilePosition 的值:

SHOW MASTER STATUS;

你会看到类似以下的输出:

+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001    |      154 | your_database_name |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+

记下 FilePosition 的值(例如:mysql-bin.000001154),稍后在从服务器配置中会用到。

步骤 2:配置从服务器

1. 登录到从服务器

使用 SSH 登录到从服务器:

ssh your_username@从服务器IP

2. 编辑 MySQL 配置文件

找到并编辑从服务器的 MySQL 配置文件 my.cnf

sudo nano /etc/my.cnf

[mysqld] 部分添加以下内容:

[mysqld]
server-id = 2  # 从服务器的唯一 ID
  • server-id:从服务器的 ID,设置为 2。

3. 重启 MySQL 服务

保存并关闭文件后,重启 MySQL 服务:

sudo systemctl restart mysql

4. 设置从服务器连接到主服务器

登录到从服务器的 MySQL:

mysql -u root -p

执行以下命令,替换 主服务器的IP地址your_password记录的File值记录的Position值

CHANGE MASTER TO
    MASTER_HOST='主服务器的IP',
    MASTER_USER='typecho',
    MASTER_PASSWORD='your_password',
    MASTER_LOG_FILE='mysql-bin.000008',
    MASTER_LOG_POS=13168;

例如,如果主服务器的 IP 是 192.168.1.100Filemysql-bin.000001Position154,命令将是:

CHANGE MASTER TO
    MASTER_HOST='192.168.1.100',
    MASTER_USER='typecho',
    MASTER_PASSWORD='your_password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=154;

5. 启动复制

启动从服务器的复制进程:

START SLAVE;

6. 检查复制状态

运行以下命令,确保复制正常:

SHOW SLAVE STATUS\G;

你会看到很多信息,关注以下两行:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果这两行都是 Yes,说明复制已成功启动。

步骤 3:测试主从同步

  1. 在主服务器上进行数据操作

    在主服务器上插入一些数据:

    USE typecho;
    CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
    INSERT INTO test_table (id, name) VALUES (1, 'Test Data');
  2. 在从服务器上检查数据

    登录到从服务器,检查数据是否同步:

    USE typecho;
    SELECT * FROM test_table;

    你应该能看到在主服务器上插入的数据。

注意事项

  • 网络连接:确保两台服务器之间的网络连接正常,且防火墙允许 MySQL 的默认端口(3306)通信。
  • 定期检查复制状态:使用 SHOW SLAVE STATUS\G; 命令定期检查复制状态,确保没有错误发生。
最后修改:2024 年 10 月 16 日
如果觉得我的文章对你有用,请随意赞赏