测试mysql8.0可行 8.4翻车 其他遇到了腾讯云两台不同地区的连不上 但是跟其他的服务商的连上了 宝塔里的那个插件就差不多是这个方法 学会后使用过后发现 实际作用还是不太给力 听了别人的方案 数据库还是老老实实单独拿一台来搞吧 或者买同地区的大厂的服务器走内网传输 只要是走内网 效果就不错 不同地区的服务器远程数据库互相连接 也始终有延迟 暂时放弃使用了
我们要在两台云服务器上设置 MySQL 主从同步。主服务器上的数据更改(如新增、删除)会自动同步到从服务器。
准备工作
- 确保你有两台服务器:假设它们的 IP 地址分别是
主服务器IP
和从服务器IP
。 - 确保你有 SSH 访问权限:你需要能够通过 SSH 登录到这两台服务器。
- 确保 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. 获取主服务器的二进制日志位置
运行以下命令,记录下 File
和 Position
的值:
SHOW MASTER STATUS;
你会看到类似以下的输出:
+----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | your_database_name | | |
+----------------------+----------+--------------+------------------+-------------------+
记下 File
和 Position
的值(例如:mysql-bin.000001
和 154
),稍后在从服务器配置中会用到。
步骤 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.100
,File
是 mysql-bin.000001
,Position
是 154
,命令将是:
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:测试主从同步
在主服务器上进行数据操作
在主服务器上插入一些数据:
USE typecho; CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50)); INSERT INTO test_table (id, name) VALUES (1, 'Test Data');
在从服务器上检查数据
登录到从服务器,检查数据是否同步:
USE typecho; SELECT * FROM test_table;
你应该能看到在主服务器上插入的数据。
注意事项
- 网络连接:确保两台服务器之间的网络连接正常,且防火墙允许 MySQL 的默认端口(3306)通信。
- 定期检查复制状态:使用
SHOW SLAVE STATUS\G;
命令定期检查复制状态,确保没有错误发生。