我在一家德国主机托管商(虚拟化系统)上运行着一台 Ubuntu 12.04 LTS 服务器。
# uname -a
Linux ... 3.2.0-27-generic #43-Ubuntu SMP Fri Jul 6 14:25:57 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
我想迁移一个名为联系我们。这不是我的第一次迁移,但我第一次在迁移过程中遇到了 mysql 的连接问题。
迁移成功,我正在运行相同版本的 Contao(或多或少只是复制/粘贴)。
对于后面的数据库,我做了:
apt-get install mysql-server phpmyadmin
我为 CMS 设置了 root 密码并添加了一个用户,该用户对其自己的数据库(且仅限于其数据库)拥有足够的权限来执行其必须执行的操作。通过 phpmyadmin 导入数据工作正常。
我可以访问 CMS 的后端(它需要处理数据库)。
如果我现在尝试访问前端,我会收到以下错误:
Fatal error: Uncaught exception Exception with message Query error:
Lost connection to MySQL server during query (<query statement here, nothing special, just a select>) thrown in /var/www/system/libraries/Database.php on line 686
(请记住:我可以使用 phpmyadmin 并通过后端访问 mysql,工作正常,只是前端调用导致错误)。
如果我在浏览器中按下 F5,有时我甚至可以杀死 mysql 守护进程。
如果我跑
# mysqld --log-warnings=2
我明白了:
...
120921 7:57:31 [Note] mysqld: ready for connections.
Version: '5.5.24-0ubuntu0.12.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu)
05:57:37 UTC - mysqld got signal 4 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.
key_buffer_size=16777216
read_buffer_size=131072
max_used_connections=1
max_threads=151
thread_count=1
connection_count=1
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 346679 K bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
Thread pointer: 0x7f1485db3b20
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7f1480041e60 thread_stack 0x30000
mysqld(my_print_stacktrace+0x29)[0x7f1483b96459]
mysqld(handle_fatal_signal+0x483)[0x7f1483a5c1d3]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7f1482797cb0]
/lib/x86_64-linux-gnu/libm.so.6(+0x42e11)[0x7f14821cae11]
mysqld(_ZN10SQL_SELECT17test_quick_selectEP3THD6BitmapILj64EEyyb+0x1368)[0x7f1483b26cb8]
mysqld(+0x33116a)[0x7f148397916a]
mysqld(_ZN4JOIN8optimizeEv+0x558)[0x7f148397d3e8]
mysqld(_Z12mysql_selectP3THDPPP4ItemP10TABLE_LISTjR4ListIS1_ES2_jP8st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select_lex+0xdd)[0x7f148397fd7d]
mysqld(_Z13handle_selectP3THDP3LEXP13select_resultm+0x17c)[0x7f1483985d2c]
mysqld(+0x2f4524)[0x7f148393c524]
mysqld(_Z21mysql_execute_commandP3THD+0x293e)[0x7f14839451de]
mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x10f)[0x7f1483948bef]
mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x1365)[0x7f148394a025]
mysqld(_Z24do_handle_one_connectionP3THD+0x1bd)[0x7f14839ec7cd]
mysqld(handle_one_connection+0x50)[0x7f14839ec830]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a)[0x7f148278fe9a]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7f1481eba4bd]
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7f1464004b60): is an invalid pointer
Connection ID (thread ID): 1
Status: NOT_KILLED
从/var/log/syslog
:
Sep 21 07:17:01 s16477249 CRON[23855]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Sep 21 07:18:51 s16477249 kernel: [231923.349159] type=1400 audit(1348204731.333:70): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=23946 comm="apparmor_parser"
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[23990]: Upgrading MySQL tables if necessary.
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[23993]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[23993]: Looking for 'mysql' as: /usr/bin/mysql
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[23993]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[23993]: This installation of MySQL is already upgraded to 5.5.24, use --force if you still need to run mysql_upgrade
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[24004]: Checking for insecure root accounts.
Sep 21 07:18:53 s16477249 /etc/mysql/debian-start[24009]: Triggering myisam-recover for all MyISAM tables
我到处都使用 MyISAM 表,没有使用 InnoDB。启动/停止 mysql 是通过
sudo service mysql start
sudo service mysql stop
在使用 Google 一段时间后,我尝试了超时、文件中正确的套接字路径/etc/mysql/my.cnf
,但没有任何帮助。有一些旧的(来自 2008 年)Gentoo 错误,重新编译即可解决问题。我已经通过以下方式重新安装了 mysql:
sudo apt-get remove mysql-server mysql-common
sudo apt-get autoremove
sudo apt-get install mysql-server
没有任何结果。
这是我第一次遇到这个问题,而且我对这种 mysql“管理”不是很有经验。
所以主要是我想知道你们是否有人可以帮助我:)
这是 mysql 错误吗?Ubuntu 存储库中是否有问题?这是那些神秘的“使用 tcp 连接而不是套接字连接,因为虚拟机使用套接字时会出现问题”问题吗?还是我完全走错了路,只是配置错了?请记住,phpmyadmin 和对后端(也使用数据库)的访问都没有问题。也许 Apache 出了问题?我该怎么办?
任何帮助都会得到赞赏,所以提前谢谢:)
编辑:我尝试使用 tcp 协议而不是本地套接字,如所述这里。不幸的是,什么也没有改变。
你们有人知道吗?
答案1
我也有一个 Ubuntu 12.04 LTS 服务器,运行在一家价格具有竞争力的德国托管公司提供的虚拟化系统上。
昨天(9 月 28 日),我注意到磁盘 I/O 非常慢。运行结果iotop
表明 mysqld 是最有可能的罪魁祸首。检查结果/var/log/syslog
表明,日志文件中的信息每 2 分钟重复一次 - 这表明 mysqld 进程正在不断尝试重新启动。
我使用 停止了 myslqd 服务sudo service mysql stop
。但是,ps
显示我仍有另一个 mysqld 进程正在运行:几周前我使用--skip-授权表当我需要重置 root 密码时,我选择了此选项,但我忘记在重置密码后停止该进程。不幸的是,在手动停止此进程时,我在此服务器上遭遇了第一次内核崩溃,但在重新启动服务器后,问题已自行解决。
经过进一步研究,似乎这是一个 AppArmor 问题。由于我是 Ubuntu Server 的新手,我对 AppArmor 了解不多,但是这个问题似乎与该问题相关。
* 顺便说一句,这是我在 StackExchange 网站上的第一个答案。我希望它有用并且符合社区礼仪。任何反馈都会受到欢迎。