【问题标题】:Start and stop local mysql instance from within application从应用程序中启动和停止本地 mysql 实例
【发布时间】:2012-06-20 22:01:31
【问题描述】:

我的任务是编写一些内部管理软件。该软件与在线 MySQL 数据库对话。但是,如果没有互联网连接,那么系统应该使用本地“离线”MySQL 数据库。

起初,我尝试使用远程 MySQL 和本地 SQLCE 来执行此操作。可悲的是,查询字符串如此不同以至于不可行。

那么我的问题是;如何在加载应用程序时在特定端口上启动 MySQL 实例,然后在关闭软件时关闭实例?

我之前已经将 XAMPP 与一个软件捆绑在一起,但不确定在这种情况下这是否是正确的方法?

ProcessStartInfo test = new ProcessStartInfo(Application.StartupPath + @"mysqldb\bin");
        test.FileName = @"mysqld.exe";
        test.UseShellExecute = true;
        Process.Start(test);

【问题讨论】:

    标签: c# mysql winforms


    【解决方案1】:

    您或许应该在本地和外部安装 MySQL 数据库。加载软件时,只需使用本地数据库即可。一切正常后,将本地与实时数据库同步,并将数据库链接从本地切换到实时。不要停止本地数据库,因为如果 Internet 出现故障,您需要能够使用本地数据库保存数据。

    始终与本地实时同步,因此如果 Internet 已启动,请使用实时数据库以及本地数据库。一切都需要同步。然后,数据将始终作为“备份”或离线数据库保存在计算机上,您的实时数据库将拥有来自任何地方的所有内容。

    使用缓冲区,因此您需要在空白处放松您的查询。另外,在 Windows 下,您可以使用 service 来启动和停止 MySQL。

    我希望我回答了你的一些问题。

    【讨论】:

    • 很好的答案,遗憾的是,多个人将在同一个来源工作,问题是当他们外出时无法访问互联网(例如,因为他们在一些脚手架上 10m)
    • 当他们没有 Internet 访问权限时,您运行什么类型的查询?只有更新和插入?或者你也在做 SELECT ?因为您可以只存储查询,直到互联网正常并进行批量更新。这就是我们在这里使用 RFID 的方式。
    • 简而言之,如果远程连接可用,那么它将在该数据库上运行查询,否则它将在本地数据库上运行它
    【解决方案2】:

    例如PathtoMysql 就像 C:\Program Files\MySQL\MySQL Server 5.0\bin

    通过在安装路径中运行 mysqld.exe 来启动服务器。

    用 MySqlAdmin -u root -p rootpassword Shutdown 停止它

    端口号即将开启,将在 my.ini 中

    【讨论】:

    • 所以你是说在启动时创建 my.ini 文件并使用 mysqld 从软件路径调用 mysql 实例?
    • 启动时。如果你要继续改变它。安装时会更合乎逻辑,但是 mysqld 会启动服务器
    【解决方案3】:

    即使这个问题现在已经很老了,希望这对将来的任何人都有帮助。请注意,对于 WPF 应用程序,需要稍作修改

    将此命名空间添加到您的项目中:

    using System.Diagnostics;
    

    将 MySQL 服务器嵌入到您的应用程序目录中:

    YOUR APP DIR
    ..mysql-server   <=== This is the mysql server directory under your App dir.
    

    现在在load 事件中启动mysql服务器:

      Process mysqlCMD = new Process();
      mysqlCMD.StartInfo.FileName = Environment.CurrentDirectory + "\\mysql-server\\bin\\mysqld.exe";
      mysqlCMD.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; // This is to hide the black CMD window
      mysqlCMD.Start();
    

    closing事件中必须停止mysql服务器,否则下次启动时会出现问题:

      Process mysqlCloseCMD = new Process();
      mysqlCloseCMD.StartInfo.FileName = Environment.CurrentDirectory + "\\mysql-server\\bin\\mysqladmin.exe";
      mysqlCloseCMD.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      mysqlCloseCMD.StartInfo.Arguments = "--user=root shutdown";
      mysqlCloseCMD.Start();
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2022-12-13
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多