[FAQ] dmctl --encrypt 对密码中有对 shell 特殊含义的字符时的正确姿势

【问题澄清】

  • 目前文档中对 encrypt 操作,密码部分无引号进行包裹;如果上游 mysql 密码中包括但不限于,@ 等特殊字符正常加密,但是在 dm 同步过程中会因为密码错误而无法进行同步
  • 相同的还有 ! 等开头的特殊字符开头的密码,这种比较好察觉,加密时如果不使用引号包裹将会报错

【解决方案】

  • 当出现 query-status 中出现同步用户:Error 1045:Access denied for user 'dm_user'@'192.168.1.100'; 类似报错需要考虑将密码重新加密,deploy 并重启 dm-worker。

【复现过程】

改为:./dmctl -encrypt 'oofe@7N****' 将可避免这个错误。

复现过程:

无引号:

  1. 修改当前密码
    image
  2. 无引号加密
  3. 修改 inventory 文件
  4. deploy -t dm-worker
  5. 查看 dm-worker config 是否已经刷新
    image
  6. 启动 dm 集群
  7. task 任务报错,帐号密码不正确。

有引号

  1. 有引号加密 & 修改 inventory 文件
  2. deploy dm-worker
  3. 查看 config 是否被修改
    image
  4. 启动 dm 集群
  5. 检查 task 状态

【相关 pr】

文档改进已经提了 pr:zh: frame special characters with quotes by glkappe · Pull Request #105 · pingcap/docs-dm · GitHub

【经典案例】