我通过将整个var / lib / mysql文件夹复制到外部驱动器来备份MySql数据库。每当我更改数据库时,我都这样做。每次,我都会收到一条消息,说明我没有获得此许可。所以我必须回去重置它们。
我必须设置错误,但我不知道是什么。任何人都可以提供建议或线索吗?
我在Ubuntu 14.04 MySql 5.5下运行。
答案 0 :(得分:1)
这个问题很老了,但由于唯一的答案解决了一些不同的问题,我会尝试一下,以防其他人通过搜索找到它。您观察到的行为是故意的。
涉及两个不同级别的权限。文件系统上有实际文件,这就是您要处理的内容。
然后还有MySQL自己的权限,是完全独立的。这就是 Ataboy Josef 所指的。
这里的问题是 MySQL 真的、真的不希望你处理这些文件。大多数其他数据库也是如此。不要用 Postgres、Oracle、SQL Server 等(SQLite 在这里是个例外),出于同样的原因:它不安全。
您正在尝试做的正是 MySQL 试图阻止的事情,因为它可能导致数据库不一致或损坏。所以 MySQL 会一有机会就重置 Linux 权限。
你有两种方法可以解决这个问题。
您使用了 mysqldump 实用程序。它将生成一个包含 SQL 代码的文件,您可以稍后重放该文件以恢复您的数据库。网上有很多关于如何执行此操作的资源,例如:https://mariadb.com/kb/en/mysqldump/ 您可能会使用一个简单的备份命令(测试它,因为它可能不适合您的特定情况):
mysqldump --all-databases >backup.sql
根据您的情况,您可能还需要为备份提供用户名和密码,指定数据库主机名(是的,如果您的数据库允许,mysqldump 可以通过网络备份)或各种其他属性。< /p>
如果你想直接备份/var/lib/mysql,可以这样做:
首先,决定备份的级别。你可以获得一个完全安全的备份,你可以获得所谓的崩溃一致性备份(意思是,当恢复时,备份看起来好像 MySQL 已经崩溃,然后 MySQL 可以尝试从中恢复),或者你可以做我称之为天真的备份(最终可能会完全损坏)。
您完全按照您在问题中提出的要求进行操作。问题是您可能会损坏(在备份中,原始数据库会很好),直到几个月后您才可能注意到。发生这种情况的原因是,如果 MySQL 处于活动状态,或者因为实际上正在向其写入某些内容,或者因为 MySQL 正在进行一些内部整理,您可能会在更改之前备份数据库的一部分,而在机会之后备份一部分。
对此的改进就是所谓的崩溃一致备份。这可能仍然包含半写的事务,但至少所有事务都来自一个时间点。
要进行这样的崩溃一致性备份,您需要使用文件系统提供的任何工具(例如 LVM 快照)拍摄文件级快照。在这里解释细节会偏离主题,所以我只给您指出一个链接:https://www.theurbanpenguin.com/maning-lvm-snapshots/ 如果该链接消失了,只需搜索 LVM 快照,您就会发现更多。
然后备份快照,而不是备份原来的/var/lib/mysql目录。
最后,不要忘记删除快照(否则,您将损失磁盘空间和性能——快照不是免费的!)
此快照是在某个时间点拍摄的,因此您不会在活动仍在进行时进行备份,但您仍可以在数据写入一半后拍摄快照。如果幸运的话,拍摄快照时数据库是安静的,您可以毫无问题地获得备份。如果运气不好,MySQL 至少会知道丢弃最后写入一半的事务。
如果你真的想备份 /var/lib/mysql 并避免所有损坏的风险,你必须在备份期间完全防止 MySQL 接触数据库。为此,您必须停止 mysqld 服务,进行备份,然后重新启动该服务。
显然,这意味着 mysqld 服务器将关闭,可能会持续很长时间。在很少被接受的生产环境中。
您可以通过将其与之前建议的文件系统快照方法相结合来减少停机时间。
所有这些,我都没有解决您最初关于权限的问题。如果您真的想要,您可以按照您建议的方式更改它们,就在每次备份之前。但通常情况下,如果您真的知道自己在做什么,那么您只希望采用这种方法,更好的方法是以 root 身份执行此操作,这样权限就不会成为问题。
在这种情况下,另一个有趣的问题是第三方备份程序将如何备份您的 MySQL 数据库。他们通常采用上述三种方法中的一种。
一些低端应用程序会采取幼稚的方法。这种类型的备份显然不是很可靠。这就是为什么这些备份是低端的!如果您在文档中找不到任何内容,通常意味着您将获得此类备份。
更好的应用程序使用快照机制,将为您提供崩溃一致的备份。
最后,好的备份程序(其中大多数不是免费的)具有数据库插件(通常还有各种其他应用程序),或者让您编写自己的脚本。那些通常会使用 mysqldump,或者内置类似的工具。
答案 1 :(得分:0)
如果您从未为MySQL设置root密码,则服务器根本不需要密码即可以root用户身份连接。但是,这是不安全的。有关分配密码的说明,请参阅“Securing the Initial MySQL Accounts”。
如果您知道root密码,但想要更改密码,请参阅“SET PASSWORD Syntax”。
如果先前设置了root密码,但忘记了密码,则可以设置新密码。以下部分提供了有关Windows系统的说明,以及适用于任何系统的一般说明。
在Windows上,使用以下过程重置所有MySQL root帐户的密码:
以管理员身份登录系统。
如果MySQL服务器正在运行,请将其停止。对于作为Windows服务运行的服务器,请转到服务管理器:从“开始”菜单中选择“控制面板”,然后选择“管理工具”,再选择“服务”。在列表中找到MySQL服务并停止它。
如果您的服务器没有作为服务运行,您可能需要使用任务管理器强制它停止。
创建包含以下语句的文本文件。将密码替换为您要使用的密码。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;
将UPDATE和FLUSH语句分别写在一行上。 UPDATE语句重置所有root帐户的密码,FLUSH语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。
保存文件。对于此示例,该文件将命名为C:\ mysql-init.txt。
打开控制台窗口以进入命令提示符:从“开始”菜单中选择“运行”,然后输入cmd作为要运行的命令。
使用特殊的--init-file选项启动MySQL服务器(注意选项值中的反斜杠加倍):
C:\> C:\mysql\bin\mysqld --init-file=C:\\mysql-init.txt
If you installed MySQL to a location other than C:\mysql
,相应地调整命令。
服务器在启动时执行--init-file选项指定的文件内容,更改每个root帐户密码。
如果希望服务器输出显示在控制台窗口而不是日志文件中,也可以在命令中添加--console选项。
如果使用MySQL安装向导安装MySQL,则可能需要指定--defaults-file选项:
C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld.exe"
--defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.1\\my.ini"
--init-file=C:\\mysql-init.txt
可以使用服务管理器找到相应的--defaults文件设置:从“开始”菜单中选择“控制面板”,然后选择“管理工具”,再选择“服务”。在列表中找到MySQL服务,右键单击它,然后选择“属性”选项。 “可执行文件的路径”字段包含--defaults-file设置。
服务器成功启动后,删除C:\ mysql-init.txt。
您现在应该能够使用新密码以root身份连接到MySQL服务器。停止MySQL服务器,然后再次以正常模式重新启动它。如果将服务器作为服务运行,请从Windows服务窗口启动它。如果手动启动服务器,请使用您通常使用的任何命令。