如何使用 Windows 服务从主数据库自动重新同步从数据库?

How to Resync the Slave database automatically from Master database using a Windows Service?

我正在编写一个 Windows 服务程序来不断地从主数据库同步本地从数据库。我有一个名为 nsbm_syncdb 的主数据库。如果我想同步从数据库,我必须编写以下查询。

CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='nsbm_root',
MASTER_PASSWORD='1234',
MASTER_LOG_FILE='mysql-bin.0000xx',
MASTER_LOG_POS=234;

对于上面的代码,我应该通过输入查询 "SHOW MASTER STATUS" 从 Master 数据库中获取 MASTER_LOG_FILEMASTER_LOG_POS 的值。

如何使用 MySql 查询从 Master 数据库中检索日志位置和日志文件名?

我浏览了互联网,但还没有找到查询。

您可以使用带有 --master-data=2 选项的 mysqldump 程序(随 MySQL 提供)。

这会将完整的 CHANGE MASTER ... 命令写入输出。

我们可以在 windows 服务程序中编写 C# 代码来访问 SHOW MASTER STATUS table 的值。 它不是现有的 table。所以我们必须创建一个 DataTable 并将 SHOW MASTER STATUS 的详细信息填入其中。

string master_log_file = null;
long master_log_pos = 0;

        using (MySqlConnection con = new MySqlConnection(conStrM))
        {
            using (MySqlCommand cmd = new MySqlCommand("SHOW MASTER STATUS", con))
            {
                cmd.CommandType = CommandType.Text;
                using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd))
                {
                    if (sda != null)
                    {
                        using (DataTable dt = new DataTable())
                        {
                            sda.Fill(dt);
                            foreach (DataRow row in dt.Rows)
                            {
                                master_log_file = row["File"].ToString();
                                master_log_pos = Convert.ToInt64(row["Position"]);
                            }
                        }
                    }

                }
            }
        }

从上面的代码我们可以得到master_log_filemaster_log_pos