Mysql 如何在ci/cd管道中创建sql数据库备份

Mysql 如何在ci/cd管道中创建sql数据库备份,mysql,amazon-rds,github-actions,Mysql,Amazon Rds,Github Actions,用例 在管道中,我尝试对数据库(AWS RDS)进行备份,并在进行任何迁移更改之前将转储存储到s3。我正在为ci/cd管道使用github操作 问题 我在尝试连接到数据库时遇到问题,出现以下错误: mysqldump:[警告]在命令行界面上使用密码 可能是不安全的。mysqldump:获取错误:1045:拒绝用户访问 “***@”在尝试连接时编辑了_ip“(使用密码:是) 我收到一个拒绝访问错误,尽管我知道凭据是正确的,因为我已经在本地测试了它。唯一的区别是,本地im提示输入密码,而在CI中我希

用例

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

问题

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

mysqldump:[警告]在命令行界面上使用密码 可能是不安全的。mysqldump:获取错误:1045:拒绝用户访问 “***@”在尝试连接时编辑了_ip“(使用密码:是)

我收到一个拒绝访问错误,尽管我知道凭据是正确的,因为我已经在本地测试了它。唯一的区别是,本地im提示输入密码,而在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 
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

我通过使用mysqldump的
--defaults extra file
标志解决了这个问题。它允许您将配置存储到.cnf文件中,然后再引用它

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 
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