AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 266480
Accepted
FreeSoftwareServers
FreeSoftwareServers
Asked: 2020-05-05 11:33:49 +0800 CST2020-05-05 11:33:49 +0800 CST 2020-05-05 11:33:49 +0800 CST

MariaDB - MySQL - ALL-DB 导入 - 表“用户”已经存在

  • 772

我正在尝试从本地 MariaDB 迁移到 Docker 版本,这本质上应该像迁移到新的 SQL Server 一样简单。我已经很好地设置了 Docker 容器,但似乎无法导入我的“所有数据库”转储。

这就是我得到的:

mysql -u root -p  < mariadb_alldb_*.sql
Enter password:
ERROR 1050 (42S01) at line 8022: Table 'user' already exists

通过以下方式生成转储:

mysqldump -u root -p --all-databases --skip-lock-tables > mariadb_alldb_"$(date '+%F')".sql

更新:每次都在一个新的 docker 容器上运行,并且我在从中导入的目录中创建了备份。

ls * | grep mariadb_alldb_
mariadb_alldb_2020-05-04.sql

Update2:也许它与我的 docker 设置有关?

这是我的 docker cmd:

docker stop mariadb && docker rm mariadb
docker run -d --name="mariadb" \
-p 3306:3306 \
-e TZ="America/Whitehorse" \
-v "/opt/mariadb/conf/conf.d":"/etc/mysql/conf.d" \
-v "/opt/mariadb/backups":"/mnt/" \
--mount type=volume,dst=/var/run/mysqld,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/var/run/mysqld \
mariadb:latest

我正在从本地机器进行此导入,我已经从容器内部复制了结果。

migration mariadb
  • 4 4 个回答
  • 8460 Views

4 个回答

  • Voted
  1. foobrew
    2021-02-12T15:39:09+08:002021-02-12T15:39:09+08:00

    正如有人已经提到的,这与mysql.user在 10.4 中将表更改为视图有关。问题和解决方案记录在 MariaDB 网站的MDEV-22127中。

    解决方案是简单地将以下两行添加到all-dbs.sql转储文件的顶部:

    DROP TABLE IF EXISTS `mysql`.`global_priv`;
    DROP VIEW IF EXISTS `mysql`.`user`;
    
    • 8
  2. SlugFiller
    2020-08-23T05:31:06+08:002020-08-23T05:31:06+08:00

    我遇到过类似的问题,这个问题似乎与 MariaDB 版本有关。也就是说,从 MariaDB 10.4 开始,mysql.user表已被视图替换,而真实数据在新mysql.global_priv表中。这会导致 DROP TABLE 失败,进而导致 CREATE TABLE 失败。

    添加--ignore-table=mysql.user到转储中会产生一个完美运行的文件,而不是不转移用户。

    不幸的是, 和 的结构mysql.user非常mysql.global_priv不同,如果用户数量很少并且权限不太复杂,最好手动重新创建用户和权限。

    • 1
  3. Best Answer
    FreeSoftwareServers
    2020-05-05T20:21:42+08:002020-05-05T20:21:42+08:00

    解决方案是两倍。我使用了一个脚本来转储除模式之外的“所有数据库”并转储用户。

    问题,仅供参考是 mysql.user 表和与锁有关的东西......

    “所有数据库转储”-> https://dba.stackexchange.com/a/69667/113202

    cat << 'EOF' >mysql_all_db_dump.sh
    #!/bin/bash
    #https://dba.stackexchange.com/a/69667/113202
    MYSQL_USER=root
    MYSQL_PASS=rootpassword
    MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
    #
    # Collect all database names except for
    # mysql, information_schema, and performance_schema
    #
    SQL="SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN"
    SQL="${SQL} ('mysql','information_schema','performance_schema')"
    
    DBLISTFILE=/tmp/DatabasesToDump.txt
    mysql ${MYSQL_CONN} -ANe"${SQL}" > ${DBLISTFILE}
    
    DBLIST=""
    for DB in `cat ${DBLISTFILE}` ; do DBLIST="${DBLIST} ${DB}" ; done
    
    MYSQLDUMP_OPTIONS="--routines --triggers --single-transaction"
    mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} --databases ${DBLIST} > all-dbs.sql
    EOF
    chmod +x mysql_all_db_dump.sh
    ./mysql_all_db_dump.sh
    

    进口:

    mysql -u root -p < all-dbs.sql
    

    用户转储:--> https://serverfault.com/questions/8860/how-can-i-export-the-privileges-from-mysql-and-then-import-to-a-new-server/399875# 399875

    MYSQL_CONN="-uroot -ppassword"
    mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
    

    进口:

    mysql -uroot -p -A < MySQLUserGrants.sql
    

    现在到我的下一个问题,所有用户主机名 = localhost -->

    复制 MySQL 用户但更改主机名

    • 0
  4. Raffael Himmelreich
    2020-12-10T11:22:57+08:002020-12-10T11:22:57+08:00

    开始使用 docker image mariadb:10.3,在那里进行导入,然后将数据升级到更新的图像。这将保留您的权限。

    • 0

相关问题

  • 新的 SQL 实例和迁移

  • 将 2 列 CSV 文件导入某种数据库....初步规划

  • SQL Server 2008 R2 Ent 试用期过期搬来快递?

  • 您规划数据迁移的工作流程是什么?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve