Mysql将当前配置导出到文件


11

我们丢失了my.cnf文件,并且想知道是否有办法从当前正在运行的mysql实例中导出副本。

谢谢!

Answers:


16

三(3)个选项

选项1:从mysql客户端中

mysql -uroot -A -e"SHOW GLOBAL VARIABLES;" > MySQLCurrentSettings.txt

这会将所有选项捕获到文本文件中。

选项2:从Linux命令行

ps -ef | grep mysqld | grep -v grep

这将显示从mysqld_safe设置开始的mysqld选项

选项3:直接询问服务器

mysqld --help --verbose

在“ mysqld --help --verbose”显示的底部,您将看到从my.cnf加载或默认为mysqld的当前设置。


-1对不起,但这没有任何意义。为什么要将SHOW VARIABLES转储到文本文件,然后对进程列表进行处理,而不对其结果进行任何处理,然后说将帮助标志读取到mysqld?
合作社

@Coops-它们是三件事。第一个捕获文本文件中的SHOW VARIABLES。第二个让您看到在启动mysql时/etc/init.d/mysql指定了哪些选项。第三个让您在显示的下半部分看到mysqld当前正在使用什么。由samspot负责在这些显示中的/etc/my.cnf中设置这些选项。我应该写一些东西来自动化和重新生成/etc/my.cnf吗?
RolandoMySQLDBA 2011年

您的开始语是“执行以下所有操作”,建议您提供逐步指南以找到问题的答案。您也不会解释每个步骤的作用或如何回答问题,这会增加混乱!:-)
合作社

很抱歉因我最初写答案的方式而引起的任何混乱。
RolandoMySQLDBA 2011年

即使重新生成my.cnf是最好的情况(我曾希望mysql可以做到这一点),但这对于我们恢复确实是非常有用的信息。我曾尝试使用谷歌搜索这些信息,但是我所能找到的只是有关备份数据库的文章。谢谢!
samspot 2011年

3

这些说明适用于centos 7.1上的mariadb股票。

下面介绍如何将计算机的当前设置备份或复制到当前或将来的新安装中。

在我们要从中复制设置的机器上,我们可以运行:

/usr/libexec/mysqld --help --verbose > mysql_current_settings.txt

在另一台计算机上,我们可以安装mariadb-server并运行:

/usr/libexec/mysqld --help --verbose > mysql_default_settings.txt

然后,我们将两个文件放入一个目录,在此示例中为“ / a /”。

然后我们运行:

comm -3 <(sort /a/mysql_current_settings.txt) <(sort /a/mysql_default_settings.txt)

如果没有输出,则两个文件相同。这意味着两台计算机上的所有设置均为默认设置。

如果有输出,则某些行将不缩进,而某些行将缩进。

非缩进的行仅出现在第一个文件(这里是/a/mysql_current_settings.txt)中。

缩进行仅出现在第二个文件(这里是/a/mysql_default_settings.txt)中。

现在我们知道所有设置,除了在启动mysqld的命令行中设置的某些设置之外。这些设置可能来自/etc/my.cnf或/etc/my.cnf.d/*文件,或者是自定义脚本或别名等。在任何情况下,我们都可以使用以下命令查看它们:

ps -ef | grep mysqld

现在,我们知道在新安装中只需更改很少的设置即可将其配置为旧安装。


这里遵循其他一些细节。

在centos 7.1上,以下命令显示所有当前设置,但在启动mysqld的命令行中设置的某些设置除外:

/usr/libexec/mysqld --help --verbose

总共显示:

在第一部分中,我们可以在启动“ mysqld”之后将其用作第一个参数的设置;

在第二部分中,设置是在编译时设置的;

在第三部分中,当前设置。

即使输出的最后一行显示:要查看正在运行的MySQL服务器正在使用的值,请键入:

    mysqladmin variables -uroot -p

即使我们在/etc/my.cnf中更改了该命令并重启mysql,该命令也不会显示fe,bind-address。

另外,以下命令显示许多设置,但不显示“ bind-address”:

mysql -uroot -p -e"SHOW VARIABLES;"

请注意,在centos 7.1上,mysqld不在$ PATH中。


2

这是生成当前my.cnf的最喜欢的方法:

{ echo -e "# MYSQL VARIABLES {{{1\n##\n# MYSQL `mysql -V|sed 's,^.*\(V.*\)\, for.*,\1,'` - By: `logname`@`hostname -f` on `date +%c`\n##"; for l in {a..z}; do echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | sed 's,\t,^= ,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..u}{a..z}"\),\n\n\1,;" "'") | eval $(echo "sed '" "s,@\(innodb_"{a..z}{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,# ,g'; done; echo -e "#\n##\n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log

但是,这对于Mac OS X无法可靠地工作。

这将输出一个干净的变量日志,已注释掉,准备导入到my.cnf中。

原始来源:http : //www.askapache.com/mysql/view-mysql-variables-my-cnf.html


一些注意事项:1.需要安装
bsdmainutils

对于服务器版本,命令为mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'。不确定是否重要,因为我认为客户端和服务器都安装在一起。{{{1和的目的是1}}}什么?
beppe9000 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.