【问题标题】:How to create backup of a sql database in a ci/cd pipeline如何在 ci/cd 管道中创建 sql 数据库的备份
【发布时间】:2020-07-07 14:25:41
【问题描述】:

用例

在管道中,我尝试备份数据库 (AWS RDS) 并将转储存储到 s3,然后再进行任何迁移更改。我正在为 ci/cd 管道使用 github 操作。

问题

我在尝试连接数据库时遇到问题,我收到以下错误:

mysqldump: [警告] 在命令行界面使用密码 可能不安全。 mysqldump:得到错误:1045:用户访问被拒绝 '***'@'redacted_ip'(使用密码:YES)尝试连接时

我收到拒绝访问错误,即使我知道凭据是正确的,因为我已经在本地进行了测试。唯一的区别是,我在本地提示输入密码,而在 CI 中我想避免提示输入密码,所以我通过命令行参数输入了密码。

pipeline.yml

name: pipeline

on: [ push ]

env:
  PROD_DATABASE_HOST: ${{ secrets.PROD_DATABASE_HOST }}
  PROD_DATABASE_USER: ${{ secrets.PROD_DATABASE_USER }}
  PROD_DATABASE_PASSWORD: ${{ secrets.PROD_DATABASE_PASSWORD }}
  
jobs:
  build:
    runs-on: self-hosted
    steps:
    - uses: actions/checkout@v2
    - name: Install mysql
      run: |
        sudo apt-get -y update
        sudo apt-get -y install mysql-client
        mysql --version
    - name: Take backup
      run: |
        mysqldump -h $PROD_DATABASE_HOST \
          -u $PROD_DATABASE_USER \
          -p="$PROD_DATABASE_PASSWORD" \
          --port=3306 \
          --single-transaction \
          --routines \
          --triggers \
          --databases  test_gg  > rds-dump.sql 

【问题讨论】:

    标签: mysql amazon-rds github-actions


    【解决方案1】:

    我通过使用 mysqldump https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html--defaults-extra-file 标志解决了这个问题。它允许您将配置存储到 .cnf 文件中,然后再引用它。

    pipeline.yml

    jobs:
      build:
        runs-on: self-hosted
        steps:
        - uses: actions/checkout@v2
        - name: Install & Setup MySQL
          run: |
            sudo apt-get -y update
            sudo apt-get -y install mysql-client
            echo MySQL VersionIs: 
            mysql --version
    
            crds="[mysqldump]\nuser=$PROD_DATABASE_USER
    \npassword=$PROD_DATABASE_PASSWORD\nhost=$PROD_DATABASE_HOST\nport=3306"
            echo -e $crds > login.cnf
    
            filename=$(date +%Y%m%dT%H%M%S)-backup
            mysqldump --defaults-extra-file=login.cnf \
              --single-transaction \
              --events \
              --routines \
              --triggers \
              --databases test_gg | gzip > ${filename}.gz
            stat -c %s ${filename}.gz
            echo Done
    

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多