Mysql 马里亚布赢得';t以CIFS共享作为datadir开始

Mysql 马里亚布赢得';t以CIFS共享作为datadir开始,mysql,cifs,mariadb-10.4,Mysql,Cifs,Mariadb 10.4,在Ubuntu服务器18.04上使用CIFS共享作为其datadir时,我对MariaDB有一个相当奇怪的问题 安装程序是一个托管在192.168.4.10的文件服务器,我的MariaDB数据库服务器是192.168.4.8。现在,我想在文件服务器上存储数据库服务器的“热数据”。为此,我在我的文件服务器上创建了一个SMB/CIFS共享,数据库服务器应使用该共享在文件服务器上存储其数据(默认位于/var/lib/mysql)(该任务已由我们的讲师指定使用,因此如果此设置对生产数据库有意义,请不要进

在Ubuntu服务器18.04上使用CIFS共享作为其datadir时,我对MariaDB有一个相当奇怪的问题

安装程序是一个托管在192.168.4.10的文件服务器,我的MariaDB数据库服务器是192.168.4.8。现在,我想在文件服务器上存储数据库服务器的“热数据”。为此,我在我的文件服务器上创建了一个SMB/CIFS共享,数据库服务器应使用该共享在文件服务器上存储其数据(默认位于
/var/lib/mysql
)(该任务已由我们的讲师指定使用,因此如果此设置对生产数据库有意义,请不要进行讨论)

我使用AutoFS装载CIFS共享。看起来像这样

/etc/auto.master

[...]
/var/autofs/net        /etc/auto.db-slave --timeout 300 --mode 0777
/etc/auto.db slave

db-slave        -fstype=cifs,username=smbmysql,password=***,rw,vers=3.0,uid=mysql,gid=mysql,forceuid,forcegid,dir_mode=0777,file_mode=0777,hard,intr,noperm        ://192.168.4.10/db_slave
我还从
/var/lib/mysql->/var/autofs/net/db slave

共享工作正常,我可以
cd
到文件夹中,当我使用
sudo-su-mysql
切换到mysql用户时,我还可以编辑/创建/删除文件和目录,更改会正确地反映在我的文件服务器上

但是,当我尝试使用
sudo systemctl start MariaDB
再次启动MariaDB服务时,它无法启动,日志文件如下所示:

Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] /usr/sbin/mysqld (mysqld 10.4.10-MariaDB-1:10.4.10+maria~bionic-log) starting as process 1291 ...
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Using Linux native AIO
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Uses event mutexes
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Number of pools: 1
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Using SSE2 crc32 instructions
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Completed initialization of buffer pool
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [ERROR] InnoDB: Cannot read first page of './ibdata1' I/O error
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [ERROR] InnoDB: Plugin initialization aborted with error I/O error
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] InnoDB: Starting shutdown...
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [ERROR] Plugin 'InnoDB' init function returned error.
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [ERROR] Unknown/unsupported storage engine: InnoDB
Dec 11 11:01:12 vmpsateam04-08 mysqld[1291]: 2019-12-11 11:01:12 0 [ERROR] Aborting
如您所见,问题似乎是InnoDB引擎无法读取
/ibdata1
。但是,该文件很好,因为当我禁用共享并将所有文件从文件服务器复制回
/var/lib/mysql
时,MariaDB服务启动得很好

正如您所见,我尝试了在AutoFS配置中可以找到的所有访问掩码参数(这就是为什么有所有这些模式、uid、gid等参数),但到目前为止没有任何效果

EDIT3:我按照@danblack的建议,以mysql用户的身份运行
strace-fe trace=%desc-o/tmp/mysqld.strace/usr/sbin/mysqld
。您可以在上找到完整的文件,希望有人能够理解这一切

跟踪的关键部分是:

1625  openat(AT_FDCWD, "./ibdata1", O_RDWR|O_CLOEXEC) = 7
1625  fcntl(7, F_SETFL, O_RDONLY|O_DIRECT) = 0
1625  fcntl(7, F_SETLK, {l_type=F_WRLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0
1625  fstat(7, {st_mode=S_IFREG|0777, st_size=79691776, ...}) = 0
1625  pread64(7, 0x56003fa78000, 65536, 0) = -1 EINVAL (Invalid argument)

su
mysql
之后,我会尝试
strace-fe trace=file-o/tmp/mysqld.strace/usr/sbin/mysqld
,看看在产生错误之前发生了哪个与ibdata1相关的系统调用。感谢您的建议。我这样做了,并编辑了我的原始帖子以涵盖结果。抱歉,文件不足。最后的openat调用成功,错误与读取第一页有关<代码>跟踪=%desc包括读/写/mmap调用。完成,在原始帖子中编辑了链接,浏览了一下,我没有看到任何东西,但也许你能理解它:)7是文件描述符,下面是对它的操作。包括在您的问题中,以避免湿转移条件。我不知道是什么原因。我建议将中的rsize增加到64k,并查看CIFS服务器日志,也许可以使用增强的日志记录。