【问题标题】:mysql/docker/cifs: innodb unable to lock persistent mountmysql/docker/cifs: innodb 无法锁定持久挂载
【发布时间】:2022-12-09 06:03:51
【问题描述】:

我正在尝试运行一个 mysql docker 容器,其中持久数据映射到通过 CIFS 安装的文件夹。

(我最初发布了一个更一般的问题,但在用户权限方面更进一步,现在错误似乎是特定于 innodb 的。因此我正在编辑整篇文章,以免混淆任何阅读它的人。)

下面是启动容器的命令:

docker run \
--name localmysql \
-v /mnt/mysqlshare:/var/lib/mysql \
--rm \
--env MYSQL_ALLOW_EMPTY_PASSWORD=true \
-it \
mysql:8.0.31-debian

/mnt/mysqlshare is a mounted cifs share. The command to map the CIFS mount is below:

sudo mount -t cifs -o username=linuxmount,cache=none,vers=3.0,uid=999,gid=999,rw [networkpath] /mnt/mysqlshare

在运行 docker 的机器上,我设置了一个名为“mysql”的用户,它是映射的 cifs 驱动器的所有者。它被配置为将 999 作为 uid 和组(与默认使用的 docker 容器中的 mysql-user 相关联)。

当远程进入容器(交互式会话)并更改为“su mysql”时,我能够写入 /var/lib/mysql 并且更改会反映在已安装的驱动器中。

但是,在启动容器时,我收到以下不断重复的错误:

2022-12-08T21:12:56.435340Z 0 [ERROR] [MY-012894] [InnoDB] Unable to open './#innodb_redo/#ib_redo0' (error: 11).
2022-12-08T21:12:56.435784Z 0 [ERROR] [MY-012574] [InnoDB] Unable to lock ./#innodb_redo/#ib_redo0 error: 13

文件夹中添加了文件:

【问题讨论】:

    标签: mysql linux docker cifs


    【解决方案1】:
    $ cd ~/
    
    $ mkdir -p data
    
    $ docker run --name demo-mysql -v `pwd`/data:/var/lib/mysql --user 1000:1000 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0.31-debian
    
    # find container id - xxxx
    $ docker ps 
    
    # find container ip - yyyy
    $ docker inspect xxxx
    
    # connect to host ip yyyy , user root
    $ docker run -it --rm mysql:8.0.31-debian mysql -h172.17.0.2 -uroot -p
    
    # enter password `my-secret-pw`
    CREATE DATABASE mydemodb;
    
    USE mydemodb;
    
    CREATE TABLE IF NOT EXISTS `book`(
       `book_id` INT UNSIGNED AUTO_INCREMENT,
       `book_title` VARCHAR(100) NOT NULL,
       `book_author` VARCHAR(100) NOT NULL,
       PRIMARY KEY ( `book_id` )
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    SHOW TABLES;
    
    DESC book;
    USE mysql;
    CREATE USER 'testuser'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';
    FLUSH PRIVILEGES;
    
    exit
    
    # exit mysql client
    exit
    
    docker run -it --rm mysql:8.0.31-debian mysql -h172.17.0.2 -utestuser -p
    USE mydemodb;
    SHOW TABLES;
    DESC book;
    exit
    
    # exit mysql client
    exit
    
    docker stop demo-mysql
    docker start demo-mysql
    

    你的数据在哪里,你可以在~/data找到文件

    【讨论】:

    • 嗨 - 我将问题编辑得更具体。
    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2020-05-27
    • 2011-09-05
    • 2015-03-15
    • 2018-01-12
    • 2021-12-20
    相关资源
    最近更新 更多