• poppy
    2019-02-15
    关于思考题,我理解是备库的同步线程其实相当于备库的一个客户端,由于备库的会把binlog中t.csv的内容写到/tmp/SQL_LOAD_MB-1-0中,如果load data命令不加'local'表示读取服务端的文件,文件必须在secure_file_priv指定的目录或子目录,此时可能找不到该文件,主备同步执行会失败。而加上local的话,表示读取客户端的文件,既然备份线程都能在该目录下创建临时文件/tmp/SQL_LOAD_MB-1-0,必然也有权限访问,把该文件传给服务端执行。

    作者回复: 👍这是其中一个原因

    
     9
  • 长杰
    2019-02-17
    课后题答案
    不加“local”,是读取服务端的文件,这个文件必须在 secure_file_priv 指定的目录或子目录下;而备库的apply线程执行时先讲csv内容读出生成tmp目录下的临时文件,这个目录容易受secure_file_priv的影响,如果备库改参数设置为Null或指定的目录,可能导致load操作失败,加local则不受这个影响。

    作者回复: 👍

    
     7
  • ☆appleう
    2019-02-15
    通知对方更新数据的意思是: 针对事务内的3个操作:插入和更新两个都是本地操作,第三个操作是远程调用,这里远程调用其实是想把本地操作的那两条通知对方(对方:远程调用),让对方把数据更新,这样双方(我和远程调用方)的数据达到一致,如果对方操作失败,事务的前两个操作也会回滚,主要是想保证双方数据的一致性,因为远程调用可能会出现网络延迟超时等因素,极端情况会导致事务10s左右才能处理完毕,想问的是这样耗时的事务会带来哪些影响呢?

    设计的初衷是想这三个操作能原子执行,只要有不成功就可以回滚,保证两方数据的一致性

    耗时长的远程调用不放在事务中执行,会出现我这面数据完成了,而对方那面由于网络等问题,并没有更新,这样两方的数据就出现不一致了



    展开

    作者回复: 嗯 了解了

    这种设计我觉得就是会对并发性有比较大的影响。
    一般如果网络状态不好的,会建议把这个更新操作放到消息队列。
    就是说
    1. 先本地提交事务。
    2. 把通知这个动作放到消息队列,失败了可以重试;
    3. 远端接收事件要设置成可重入的,就是即使同一个消息收到两次,也跟收到一次是相同的效果。
    2 和3 配合起来保证最终一致性。

    这种设计我见到得比较多,你评估下是否符合你们业务的需求哈

     1
     4
  • undifined
    2019-02-15
    老师,用物理导入的方式执行 alter table r import tablespace 时 提示ERROR 1812 (HY000): Tablespace is missing for table `db1`.`r`. 此时 db1/ 下面的文件有 db.opt    r.cfg r.frm r.ibd t.frm t.ibd;这个该怎么处理

    执行步骤:

    mysql> create table r like t;
    Query OK, 0 rows affected (0.01 sec)

    mysql> alter table r discard tablespace;
    Query OK, 0 rows affected (0.01 sec)

    mysql> flush table t for export;
    Query OK, 0 rows affected (0.00 sec)

    cp t.cfg r.cfg
    cp t.ibd r.ibd

    mysql> unlock tables;
    Query OK, 0 rows affected (0.01 sec)

    mysql> alter table r import tablespace;
    ERROR 1812 (HY000): Tablespace is missing for table `db1`.`r`.

    展开

    作者回复: 应该就是评论区其他同学帮忙回复的权限问题了吧?

     1
     4
  • ☆appleう
    2019-02-15
    老师,我想问一个关于事务的问题,一个事务中有3个操作,插入一条数据(本地操作),更新一条数据(本地操作),然后远程调用,通知对方更新上面数据(如果远程调用失败会重试,最多3次,如果遇到网络等问题,远程调用时间会达到5s,极端情况3次会达到15s),那么极端情况事务将长达5-15s,这样会带来什么影响吗?

    作者回复: “通知对方更新上面数据” 是啥概念,如果你这个事务没提交,其他线程也看不到前两个操作的结果的。

    设计上不建议留这么长的事务哈,最好是可以先把事务提交了,再去做耗时的操作。

    
     4
  • lionetes
    2019-02-15
    mysql> select * from t;
    +----+------+
    | id | name |
    +----+------+
    | 1 | Bob |
    | 2 | Mary |
    | 3 | Jane |
    | 4 | Lisa |
    | 5 | Mary |
    | 6 | Jane |
    | 7 | Lisa |
    +----+------+
    7 rows in set (0.00 sec)

    mysql> create table tt like t;
    Query OK, 0 rows affected (0.03 sec)

    mysql> alter table tt discard tablespace;
    Query OK, 0 rows affected (0.01 sec)

    mysql> flush table t for export;
    Query OK, 0 rows affected (0.01 sec)

    mysql> unlock tables;
    Query OK, 0 rows affected (0.00 sec)

    mysql> alter table tt import tablespace;
    Query OK, 0 rows affected (0.03 sec)

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | t |
    | t2 |
    | tt |
    +----------------+
    3 rows in set (0.00 sec)

    mysql> select * from t;
    +----+------+
    | id | name |
    +----+------+
    | 1 | Bob |
    | 2 | Mary |
    | 3 | Jane |
    | 4 | Lisa |
    | 5 | Mary |
    | 6 | Jane |
    | 7 | Lisa |
    +----+------+
    7 rows in set (0.00 sec)

    mysql> select * from tt;
    +----+------+
    | id | name |
    +----+------+
    | 1 | Bob |
    | 2 | Mary |
    | 3 | Jane |
    | 4 | Lisa |
    | 5 | Mary |
    | 6 | Jane |
    | 7 | Lisa |
    +----+------+
    7 rows in set (0.00 sec)



    ll 后 查看 tt.cfg 文件没有自动删除 5.7mysql

    -rw-r-----. 1 mysql mysql 380 2月 15 09:51 tt.cfg
    -rw-r-----. 1 mysql mysql 8586 2月 15 09:49 tt.frm
    -rw-r-----. 1 mysql mysql 98304 2月 15 09:51 tt.ibd
    展开

    作者回复: 你说得对,👍细致

    import动作 不会自动删除cfg文件,我图改一下

    
     3
  • PengfeiWang
    2019-02-18
    老师,您好:
            文中“–add-locks 设置为 0,表示在输出的文件结果里,不增加" LOCK TABLES t WRITE;" 是否是笔误,--add-locks应该是在insert语句前后添加锁,我的理解此处应该是--skip-add-locks,不知道是否是这样?

    作者回复: 嗯嗯,命令中写错了,是--add-locks=0,
    效果上跟--skip-add-locks是一样的哈
    👍细致

    
     2
  • 库淘淘
    2019-02-15
    如果不加local 如secure_file_priv 设置为null 或者路径 可能就不能成功,这样加了之后可以保证执行成功率不受参数secure_file_priv影响。 还有发现物理拷贝文件后,权限所属用户还得改下,不然import tablespace 会报错找不到文件,老师是不是应该补充上去,不然容易踩坑。

    作者回复: 嗯嗯,有同学已经踩了,
    我加个说明进去,多谢提醒

    
     2
  • 信信
    2019-02-15
    老师好,唯一索引的加next-key lock时,会退化会记录锁。这中间会先拿到间隙锁再释放,还是从一开始就不会获取间隙锁,直接只获取记录锁呢?

    作者回复: 在我们这篇的例子里面,insert duplicate key后导致加锁这个,是不会退化的哦。

    如果是说我们在21篇讲的加锁规则里面, 这个退化的效果就是直接不加间隙锁

    
     2
  • 尘封
    2019-02-15
    老师mysqldump导出的文件里,单条sql里的value值有什么限制吗默认情况下,假如一个表有几百万,那mysql会分为多少个sql导出?
    问题:因为从库可能没有load的权限,所以local

    作者回复: 好问题,

    会控制单行不会超过参数net_buffer_length,这个参数是可以通过--net_buffer_length 传给mysqldump 工具的

    
     2
  • 小灰灰
    2019-04-16
    老师您好,想问下如果是迁移5000W左右的一张表,使用导出CSV文件的方式效率高吗?

    作者回复: 导出挺快的,但是导入就不好办了。~

    
     1
  • 佳
    2019-03-14
    老师好,这个/tmp/SQL_LOAD_MB-1-0 是应该在主库上面,还是备库上面?为啥我执行完是在主库上面出现了这个文件呢?

    作者回复: 就是在MySQL的运行进程所在的主机上

    
     1
  • AstonPutting
    2019-02-22
    老师,mysqlpump能否在平时代替mysqldump的使用?

    作者回复: 我觉得是

     1
     1
  • 夜空中最亮的星(华仔...
    2019-02-15
    学习完老师的课都想做dba了
    
     1
  • ZVan
    2020-02-01
    我其实每次都粗暴的导出,然后发邮件,让dba同学导入。。。没想到这么多讲究,但是我没有实践过,所以不是很懂
    
    
  • 帅
    2019-09-26
    请老师给我看看mysql报错内容是哪里的问题,谢谢老师,一直关注你很久了
    
    
  • 帅
    2019-09-26
    关于mysqldump方法导出,老师我有问题
    mysqldump -h 127.0.0.1 -P 3306 -u root --add-locks=0 --no-create-info --single-transaction --set-gtid-purged=OFF db1 t --where="a>900" --result-file=/client_tmp/t.sql

    报错
    [SQL]mysqldump -h 127.0.0.1 -P 3306 -u root --add-locks=0 --no-create-info --single-transaction --set-gtid-purged=OFF db1 t --where="a>900" --result-file=/client_tmp/t.sql

    [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump -h 127.0.0.1 -P 3306 -u root --add-locks=0 --no-create-info --single-t' at line 1

    windows里面的navicat操作的时候报这个错,什么原因啊
    展开
    
    
  • philips
    2019-08-12
    老师您好,如果跨数据库复制大表的话有没有类似物理拷贝的方式可以用吗?我自己试验tablespace的方法失败了。
    
    
  • godtrue
    2019-08-08
    老师,好!
    我目前的理解,一个数据库可以包含多张表,每张表的数据在逻辑上是按照B+树的结构存储的。请问物理上,一个数据库的信息是怎么存放在磁盘上的。猜测一个库会对应一个目录,一张表会对应若干文件,用于存储表结构和数据,表数据存储的格式是什么?经过压缩或加密处理嘛?怎么和逻辑结构映射起来?另外,数据量巨大的化会分文件嘛?如果分,有什么分的原则呢?如果让你设计一个数据库,数据存储这块怎么设计呢?
    
    
  • beyondkmp
    2019-06-03
    一条 INSERT 语句里面会包含多个 value 对,会加快插入速度,主要是从哪几个方面加快呢?我目前能想到的是:不用每条语句都要重复分析一遍,还有其它原因吗?网络连接应该不算,可以使用长连接,事务应该也不算,多条插入也可以当成一个事务。
    
    
我们在线,来聊聊吧