【问题标题】:How to exclusive lock mysql database?如何排他锁mysql数据库?
【发布时间】:2010-10-27 12:54:34
【问题描述】:

我有多个 mysql 数据库,我想对特定数据库执行一些管理任务。如何确保在执行任务时没有其他人可以连接到该数据库?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    显然,您可以为此使用 FLUSH 命令:

    > 带读锁的刷新表;

    然后

    > 解锁表格;

    再次解锁数据库。不确定是否需要在表上设置某些设置以允许读锁。您可以通过在数据库锁定后尝试手动插入来测试这一点,如果您收到有关表被锁定的错误消息,您就知道它有效。

    More information on FLUSH command

    【讨论】:

    • 这是正确答案。我们使用它来创建整个数据库的快照以创建新的复制从属。
    • 必须修复链接(MySQL 6.0 行被删除,以支持不同的发布周期,如 lists.mysql.com/packagers/418 中所述)。我已将链接指向 5.7 的文档,这是当前可用的最新版本。除此之外,一个大 +1:这就是(大多数)SO 答案应该是这样的:简洁、准确,并为那些想要深入研究该主题的人提供指向知名资源的指针。
    【解决方案2】:

    在我看来,您有几个选择:

    • 关闭mysqld,要与数据库建立连接的守护进程。这样做的缺点是阻止访问该计算机上的所有 mysql 数据库。

    • 移动文件或更改对它的访问权限,以便只有您的用户可以使用它。 (我不知道这是否可行。)数据库文件位于/var/lib/mysql 之类的地方。只是不要忘记,当您完成将它们改回 mysqld 将能够使用的东西时!

    祝你好运!

    【讨论】:

      【解决方案3】:

      如果您有能力在维护期间停止服务器,请停止守护程序并将其重新配置为不监听网络连接。只允许通过本地 UNIX 套接字进行连接。

      然后在同一台机器上本地登录,无论是物理登录还是通过 SSH。只要没有其他人可以访问机器,这将确保您一个人。完成后,恢复原始配置文件并重新启动守护进程。

      另一种方法是暂时禁用特定数据库的所有用户帐户,但“root”(或您用来进行维护的任何用户帐户)除外。但是,这样做的缺点是实际上会弄乱帐户数据,这比仅仅阻止网络连接风险更大。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多