我有运行MySQL服务器5.5.24的Ubuntu 12.04。 我可以连接mysql --user root -p
。 status
显示我:
... Connection: Localhost via UNIX socket ...
当我尝试连接mysql --host 127.0.0.1 --user root -p
(或与 – 协议--protocol=tcp
)我可以连接(获得提示),但任何我会尝试做会得到我这个错误:
ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 39 Current database: *** NONE *** ERROR 2013 (HY000): Lost connection to MySQL server during query
netstat -pal | grep -P '3306|mysql'
netstat -pal | grep -P '3306|mysql'
显示:
tcp 0 0 localhost:mysql *:* LISTEN 26535/mysqld unix 2 [ ACC ] STREAM LISTENING 121787 26535/mysqld /var/run/mysqld/mysqld.sock unix 3 [ ] STREAM CONNECTED 18810 2252/mysql-workbenc unix 3 [ ] STREAM CONNECTED 16377 2252/mysql-workbenc unix 3 [ ] STREAM CONNECTED 18765 2252/mysql-workbenc unix 3 [ ] STREAM CONNECTED 17959 2252/mysql-workbenc
使用UNIX套接字,我能够工作得很好。 有任何想法吗?
编辑 – 我的/etc/mysql/my.cnf
# # The MySQL database server configuration file. # # You can copy this to one of: # - "/etc/mysql/my.cnf" to set global options, # - "~/.my.cnf" to set user-specific options. # # One can use all long options that the program supports. # Run program with --help to get a list of available options and with # --print-defaults to see which it would actually understand and use. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # This will be passed to all mysql clients # It has been reported that passwords should be enclosed with ticks/quotes # escpecially if they contain "#" chars... # Remember to edit /etc/mysql/debian.cnf when changing the socket location. [client] port = 3306 socket = /var/run/mysqld/mysqld.sock # Here is entries for some specific programs # The following values assume you have at least 32M ram # This was formally known as [safe_mysqld]. Both versions are currently parsed. [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] # # * Basic Settings # user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking # # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 # # * Fine Tuning # key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 # This replaces the startup script and checks MyISAM tables if needed # the first time they are touched myisam-recover = BACKUP #max_connections = 100 #table_cache = 64 #thread_concurrency = 10 # # * Query Cache Configuration # query_cache_limit = 1M query_cache_size = 16M # # * Logging and Replication # # Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. # As of 5.1 you can enable the log at runtime! #general_log_file = /var/log/mysql/mysql.log #general_log = 1 # # Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. # # Here you can see queries with especially long duration #log_slow_queries = /var/log/mysql/mysql-slow.log #long_query_time = 2 #log-queries-not-using-indexes # # The following can be used as easy to replay backup logs or for replication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. #server-id = 1 #log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M #binlog_do_db = include_database_name #binlog_ignore_db = include_database_name # # * InnoDB # # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. # Read the manual for more InnoDB related options. There are many! # # * Security Features # # Read the manual, too, if you want chroot! # chroot = /var/lib/mysql/ # # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". # # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] #no-auto-rehash # faster start of mysql but no tab completition [isamchk] key_buffer = 16M # # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/
编辑 – 新的发现
我只是发现mysqld进程每次尝试连接tcp和运行时崩溃。 我在/var/log/syslog
看到并使用ps -ef
来validationPID更改:
Oct 24 16:14:47 desktop kernel: [13190.117685] init: mysql main process (27929) terminated with status 1 Oct 24 16:14:47 desktop kernel: [13190.117685] init: mysql main process ended, respawning Oct 24 16:14:48 desktop kernel: [13190.212097] type=1400 audit(1351088088.044:124): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=28079 comm="apparmor_parser" Oct 24 16:14:50 desktop /etc/mysql/debian-start[28123]: Upgrading MySQL tables if necessary. Oct 24 16:14:50 desktop /etc/mysql/debian-start[28126]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored Oct 24 16:14:50 desktop /etc/mysql/debian-start[28126]: Looking for 'mysql' as: /usr/bin/mysql Oct 24 16:14:50 desktop /etc/mysql/debian-start[28126]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck Oct 24 16:14:50 desktop /etc/mysql/debian-start[28126]: This installation of MySQL is already upgraded to 5.5.24, use --force if you still need to run mysql_upgrade Oct 24 16:14:50 desktop /etc/mysql/debian-start[28137]: Checking for insecure root accounts. Oct 24 16:14:50 desktop /etc/mysql/debian-start[28142]: Triggering myisam-recover for all MyISAM tables
这和我在启动mysqld时的常规日志非常相似,但是我仍然发布它,以防有人从中得到一些有趣的东西。
编辑:我的/etc/apparmor.d/usr.sbin.mysqld
# vim:syntax=apparmor # Last Modified: Tue Jun 19 17:37:30 2007 #include <tunables/global> /usr/sbin/mysqld { #include <abstractions/base> #include <abstractions/nameservice> #include <abstractions/user-tmp> #include <abstractions/mysql> #include <abstractions/winbind> capability dac_override, capability sys_resource, capability setgid, capability setuid, network tcp, /etc/hosts.allow r, /etc/hosts.deny r, /etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/*.cnf r, /usr/lib/mysql/plugin/ r, /usr/lib/mysql/plugin/*.so* mr, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /var/log/mysql.log rw, /var/log/mysql.err rw, /var/lib/mysql/ r, /var/lib/mysql/** rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid w, /var/run/mysqld/mysqld.sock w, /run/mysqld/mysqld.pid w, /run/mysqld/mysqld.sock w, /sys/devices/system/cpu/ r, # Site-specific additions and overrides. See local/README for details. #include <local/usr.sbin.mysqld> }
编辑 – 崩溃时mysqld的堆栈跟踪
我从命令行运行mysqld
,然后从其他控制台连接。 当我连接这个输出时,服务器立即崩溃:
121024 16:59:09 [Note] mysqld: ready for connections. Version: '5.5.24-0ubuntu0.12.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu) 14:59:37 UTC - mysqld got signal 8 ; 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: 0x7fd27a8ccb10 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 = 7fd277befe60 thread_stack 0x30000 mysqld(my_print_stacktrace+0x29)[0x7fd278195459] mysqld(handle_fatal_signal+0x483)[0x7fd27805b1d3] /lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7fd276b83cb0] /usr/share/appfirst/libwrap.so.1.0.1(af_timer_now+0x12f)[0x7fd2777fdc53] /usr/share/appfirst/libwrap.so.1.0.1(intercept_write+0x259)[0x7fd277801594] /usr/share/appfirst/libwrap.so.1.0.1(write+0x28)[0x7fd2778016e3] mysqld(net_real_write+0xaa)[0x7fd277eccfea] mysqld(net_flush+0x1b)[0x7fd277ecd4cb] mysqld(_Z11net_send_okP3THDjjyyPKc+0x178)[0x7fd277ed3098] mysqld(_ZN8Protocol13end_statementEv+0x4c)[0x7fd277ed343c] mysqld(_Z22thd_prepare_connectionP3THD+0x6a)[0x7fd277feb39a] mysqld(_Z24do_handle_one_connectionP3THD+0xf8)[0x7fd277feb708] mysqld(handle_one_connection+0x50)[0x7fd277feb830] /lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a)[0x7fd276b7be9a] /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fd2762accbd] Trying to get some variables. Some pointers may be invalid and cause the dump to abort. Query (0): is an invalid pointer Connection ID (thread ID): 2 Status: NOT_KILLED The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains information that should help you find out what is causing the crash.
它说有关内存使用情况(〜350MB),所以它可能是相关的知道服务器是虚拟的(在Windows 7机器VBOX)与5GB内存(在主机8GB)。 我查了一下,客机上有3.5GB的空闲空间。