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
    • 最新
    • 标签
主页 / user-73768

merlin's questions

Martin Hope
merlin
Asked: 2021-12-26 08:23:01 +0800 CST

为什么mysqldump不备份程序?

  • 1

我正在运行 MySQL 8.0.23 并尝试备份/恢复程序。因此,我创建了一个具有以下权限的用户“dump@localhost”:

> Grants for dump@localhost
> GRANT PROCESS ON *.* TO `dump`@`localhost` 
> GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON `mydb`.* TO `dump`@`localhost`

像这样创建备份:

 mysqldump -u dump -p -n -d -t -R mydb > test.sql

命令执行,但 sql 文件中没有过程。

--
-- Dumping routines for database 'mydb'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2021-12-25 17:21:39

但是,如果我使用自己的用户帐户而不是“转储”或同时使用 root,它将转储程序。

根据 MySQL 8 文档,提供的权限应该足够了: https ://dev.mysql.com/doc/refman/8.0/en/mysqldump.html

mysqldump 至少需要转储表的 SELECT 权限,转储视图的 SHOW VIEW ,转储触发器的 TRIGGER ,如果不使用 --single-transaction 选项,则需要 LOCK TABLES ,并且(从 MySQL 8.0.21 开始)PROCESS 如果 --不使用 no-tablespaces 选项。如选项描述中所述,某些选项可能需要其他权限。

我的一个典型程序如下所示:

create
definer = root@localhost procedure SUM_prices_d()
INSERT IGNORE INTO SUM_prices_d
...

我缺少什么权利?

mysql backup
  • 1 个回答
  • 607 Views
Martin Hope
merlin
Asked: 2021-05-09 07:19:19 +0800 CST

为什么将 MySQL 转储从 5.7 导入到 8.0.x 时出现 ERROR 1824 (HY000)?

  • 0

我有一个大约 12GB 的 MySQL 5.7.x 转储,我尝试将其导入新安装的 MySQL 8.0.x 本地实例。

mysql -u username -p test < DB-210508.sql  

导入开始但失败并显示以下消息:

ERROR 1824 (HY000) at line 518: Failed to open the referenced table 'table-name'

我想知道为什么外键有问题,如果不是因为我正在导入 8.0.x

MySQL 8.0.x 实例配置如下:

[mysqld]
default_authentication_plugin= mysql_native_password
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 32
innodb_buffer_pool_chunk_size = 134217728
collation_server        = utf8_unicode_ci
character_set_server    = utf8

导入失败的原因可能是什么?

mysql migration
  • 1 个回答
  • 3666 Views
Martin Hope
merlin
Asked: 2021-01-08 22:35:02 +0800 CST

如何在 MySQL 中的两个表上设置外键?

  • 3

我正在努力解决 MySQL 5.7 的数据库设计以解决以下情况:

类别维度每天都在变化,我将它们存储在 category_entities 中。它们属于与商家及其产品相关的类别:

商人

merchant_id | merchant
1           | amazon
2           | ebay

PK: merchant_id

产品

prod_id    | merchant_id | product
1          | 1           | jumper big
2          | 1           | hat red
3          | 2           | shoe black
3          | 1           | shoe black2 

PK: merchant_id, prod_id

类别

cat_id     | merchant_id | category
1          | 1           | jumpers in green 
2          | 1           | hats for woman
3          | 1           | shoes
4          | 2           | jumpers 
5          | 2           | hats for children
6          | 2           | shoes

PK: cat_id

category_entities(30M 行)

cat_id | prod_id | characteristica | date
1      | 1       | 23              | 2021-01-07
2      | 2       | 22              | 2021-01-07
1      | 2       | 22              | 2021-01-08
2      | 3       | 01              | 2021-01-08
3      | 1       | 22              | 2021-01-08
4      | 2       | 01              | 2021-01-08

PK: cat_id, prod_id, date

所以类别表定义了存在的类别,而 category_entities 表显示了每一天的值

如何使用 prod_id、merchant_id 在表产品的表(类别、类别实体)上设置外键。这些字段是产品的主键。

我正在阅读多态关联,但我不确定这是一个以及如何解决这个问题。

mysql foreign-key
  • 1 个回答
  • 204 Views
Martin Hope
merlin
Asked: 2020-12-06 07:55:23 +0800 CST

如何使用外键更新生产表中的值?

  • 1

我在 5.7.32 上有一个产品 MySQL 表,我想在其中更新值。它仅包含 4K 行。但是,还有另一个表具有我要更新的表的外键,并且该表包含数百万行。

table a
ID | DIMENSION | VALUE

table b
ID | A_ID | ..
Key: A_ID -> a.ID cascade

现在我如何更新表a?我害怕级联到表 b 以防我在导入之前进行截断。新表值位于开发 DBMS 上,最初考虑执行单个导出,然后使用先前的截断导入。

更新后的表包含其他行,已删除行并已编辑行。

更新数据的推荐方法是什么?

我可以在使用 PhpMyAdmin 4.5.7 导出期间简单地使用以下设置,然后在 prod 上导入吗?

在此处输入图像描述

mysql
  • 1 个回答
  • 33 Views
Martin Hope
merlin
Asked: 2018-11-27 13:28:16 +0800 CST

mysql在不同输入上以相同分数匹配

  • 0

我正在尝试使用 mysql 查找与给定名称最接近的匹配项。前两个结果的得分相同,但看着它我宁愿得到第二个,因为它几乎符合这个名字。

SELECT ID, name, MATCH (`name`) 
AGAINST ('Superocean Héritage 42mm' IN BOOLEAN MODE) as `score` 
FROM cat_names cs 
WHERE MATCH (`name`) AGAINST ('Superocean Héritage 42mm' IN BOOLEAN MODE) 
ORDER BY `score` DESC

结果:

Superocean Héritage     6.3744072914123535

Superocean Héritage 42  6.3744072914123535

Superocean Héritage 46  6.3744072914123535

有没有办法调整查询以正确检索第二个结果?

此外,全文搜索返回精确匹配的低质量分数:

Big Bang Aero Bang
9.445959091186523
Big Bang 44 mm
6.32852840423584
Big Bang Caviar
6.32852840423584
Big Bang Jeans
6.32852840423584
Big Bang Meca-10
6.32852840423584
Big Bang Sang Bleu
6.32852840423584
Big Bang Unico
6.32852840423584
Spirit of Big Bang
6.32852840423584
Big Bang 41 mm
6.32852840423584
Big Bang Broderie
6.32852840423584
Big Bang Ferrari
6.32852840423584
Big Bang King
6.32852840423584
Big Bang Pop Art
6.32852840423584
Big Bang Tutti Frutti
6.32852840423584
Big Bang
6.32852840423584

完全匹配的分数最低。

mysql full-text-search
  • 1 个回答
  • 1136 Views
Martin Hope
merlin
Asked: 2016-01-10 04:29:50 +0800 CST

MySQL按like语句分组?

  • 5

我需要从我们的 MySQL-DB 中获取一些统计信息,并想知道是否有更快的方法来执行此操作。

基本上,在包括按属性分隔之前,我需要有关任何给定月份的用户注册信息。

例如:

SELECT count(*) AS c  
FROM `users` 
WHERE `date_created` LIKE '2015-10%' 
  AND `country` = 'DE'

这将返回 2015 年 10 月的数字。如何更改此语句以在一个语句中返回所有月份的结果?

我也有兴趣添加类似的东西AND confirmed = 1作为单独的结果。

这是否可能只使用一个 MySQL 语句?

mysql group-by
  • 2 个回答
  • 4389 Views
Martin Hope
merlin
Asked: 2016-01-07 04:52:52 +0800 CST

切换到 MySQL Galera 后出现重复键错误

  • 1

我最近从单个 MySQL 安装切换到 MySQL Galera,它在通过 HAProxy 寻址的 3 个节点上运行。自从切换以来,我确实随机报告了“重复密钥”错误,这在理论上应该是不可能的,因为我会检查数据集是否已经可用。

例如:

MySQL Error executing stmt:

        INSERT INTO user_ips
            (user_id,ip) 
        VALUES
            ('444079','41.205.7.198, 176.9.19.101')


 Error No:  1062
 Error:         Duplicate entry '444079-41.205.7.198, 1' for key 'user_id'

我的代码如下所示:

function save_user_ip($user_id){
    global $T62, $link;
    $ip = $_SERVER['REMOTE_ADDR'];
    // do we already know that user by this ip?
    $stmt="
        SELECT ID AS ip_id
        FROM $T62
        WHERE user_id = '$user_id' AND ip = '$ip'
    ";
    $row = db_get_row2($stmt);
    $ip_id = isset($row->ip_id) ? $row->ip_id : "";

    if (!$ip_id){ // ip unknown for that user, save it
        $stmt="
            INSERT INTO $T62
                (user_id,ip) 
            VALUES
                ('$user_id','$ip')
        ";
        db_query($stmt);
        $ip_id = db_insertid($link);
    }       
    return $ip_id;
}

在测试页上运行它按预期工作。然而,在负载下的生产服务器上,它并不总是有效。我考虑过 INSERT IGNORE 但不想在所有操作上运行插入,因为写入速度较慢并且还会触发警告。

运行SHOW CREATE TABLE tablename会创建以下输出:1146 - 表“tablename”不存在

一种似乎至少适用于开发集群的可能解决方案:

// save ip. Will ignore if already known ip
$stmt="
    INSERT IGNORE INTO $T62
        (user_id,ip) 
    VALUES
        ('$user_id','$ip')
";
#echo $stmt; exit;
db_query($stmt);
$ip_id = db_insertid($link);
// if ip already known, retrieve it
if (!$ip_id){ 
    $stmt="
        SELECT ID AS ip_id
        FROM $T62
        WHERE user_id = '$user_id' AND ip = '$ip'
    ";
    $row = db_get_row2($stmt);
    $ip_id = $row->ip_id;
}   
return $ip_id;

不确定这会如何改善产品的情况,或者是否会让事情变得更糟。可能有更优雅的解决方案。

在此先感谢您提供的任何帮助。

mysql galera
  • 1 个回答
  • 973 Views

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