MySQL 5.7无法创建Unix套接字锁文件

7

我正在尝试在同一台Ubuntu 16.10 32位计算机上创建多个MySQL 5.7实例。我已将原始数据目录复制到新目录,为新实例创建了单独的日志文件夹(日志正在工作)并将所有者更改为mysql:mysql以适用于新的数据目录/var/lib/mysql2和日志目录/var/log/mysql2/。我已删除app-armor。在查询其他SO答案后,发现没有一个答案解决了多实例问题。

这是我的my2.cnf:

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld2.pid
socket          = /var/run/mysqld/mysqld2.sock
port            = 3307
basedir         = /usr
datadir         = /var/lib/mysql2
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_size         = 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-options  = BACKUP
#max_connections        = 100
#table_open_cache       = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 16M

[mysqld_safe]
socket          = /var/run/mysqld/mysqld2.sock
nice            = 0

如您所见,我已分别将端口更改为3307和其他端口。现在当我运行(必须将sudo添加到mysqld中)时:

sudo mysqld --defaults-file=/etc/mysql/my2.cnf &

我收到:

2017-03-22T08:31:21.684121Z 0 [Note] mysqld (mysqld 5.7.17-0ubuntu0.16.10.1) starting as process 13676 ...
2017-03-22T08:31:21.687115Z 0 [Note] InnoDB: PUNCH HOLE support available
2017-03-22T08:31:21.687131Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-03-22T08:31:21.687135Z 0 [Note] InnoDB: Uses event mutexes
2017-03-22T08:31:21.687140Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2017-03-22T08:31:21.687143Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
2017-03-22T08:31:21.687147Z 0 [Note] InnoDB: Using Linux native AIO
2017-03-22T08:31:21.687281Z 0 [Note] InnoDB: Number of pools: 1
2017-03-22T08:31:21.687344Z 0 [Note] InnoDB: Not using CPU crc32 instructions
2017-03-22T08:31:21.688116Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2017-03-22T08:31:21.693801Z 0 [Note] InnoDB: Completed initialization of buffer pool
2017-03-22T08:31:21.694846Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the $
2017-03-22T08:31:21.708807Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2017-03-22T08:31:21.776053Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2017-03-22T08:31:21.776228Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2017-03-22T08:31:21.825266Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2017-03-22T08:31:21.826338Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2017-03-22T08:31:21.826359Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2017-03-22T08:31:21.826695Z 0 [Note] InnoDB: Waiting for purge to start
2017-03-22T08:31:21.880277Z 0 [Note] InnoDB: 5.7.17 started; log sequence number 2535531
2017-03-22T08:31:21.881286Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql2/ib_buffer_pool
2017-03-22T08:31:21.881581Z 0 [Note] Plugin 'FEDERATED' is disabled.
2017-03-22T08:31:21.887687Z 0 [Note] InnoDB: Buffer pool(s) load completed at 170322 14:01:21
2017-03-22T08:31:21.890330Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without cer$
2017-03-22T08:31:21.890380Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3307
2017-03-22T08:31:21.890407Z 0 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
2017-03-22T08:31:21.890695Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2017-03-22T08:31:21.890791Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld2.sock.lock.
2017-03-22T08:31:21.890807Z 0 [ERROR] Unable to setup unix socket lock file.
2017-03-22T08:31:21.890819Z 0 [ERROR] Aborting

我错过了什么?


MySQL用户可以写入/var/run/mysqld/吗? - Michael - sqlbot
是的...该目录的所有者是mysql:mysql。 - Mallik Kumar
...并且具有像rwx...这样的权限,套接字文件不存在错误的权限或所有权吗? - Michael - sqlbot
原始的.sock文件没有可执行权限(rw)。此外,我在文件夹中也看不到mysql2.sock。 - Mallik Kumar
如果是我,我会在strace下启动mysqld,以查看确切地哪个调用被进行并且返回了什么错误。这将产生大量输出,但由于mysqld正在关闭,因此它不应该无法处理。 - Michael - sqlbot
2个回答

1

对于那些使用 apparmor 的用户,可以在 /etc/apparmor.d/usr.sbin.mysqld 中添加以下权限,以允许 mysqld 创建和使用锁文件。

/var/run/mysqld/mysqld2.pid rw,
/var/run/mysqld/mysqld2.sock rw,
/var/run/mysqld/mysqld2.sock.lock rw,

然后以 root 身份运行以下命令以重新加载配置文件。

apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

由于某种原因,我在这三个文件上没有rw权限,导致出现了OP的错误。


0

检查是否存在锁定文件

ls /var/run/mysqld/mysqld2.sock.lock

1. 如果存在

1.1 检查哪个进程使用了锁文件

lsof /var/run/mysqld/mysqld2.sock.lock

1.1.1 如果没有进程正在使用锁文件

  • 删除锁文件
rm /var/run/mysqld/mysqld2.sock.lock
  • 然后启动mysql

1.1.2 如果有进程正在使用锁文件

  • 锁文件和套接字文件更改为另一个路径

2. 如果不存在

  • 需要更多信息以检查发生了什么
strace -ff mysqld --defaults-file=/etc/mysql/my2.cnf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接