如何将MySQL代码放入源代码管理?

问题描述 投票:0回答:4

我知道我可以手动将所有 MySQL 代码复制到文件中,然后将这些文件放入源代码管理中。但是有什么办法可以自动执行此操作吗?

我想对存储过程执行此操作,还想对表/事件/触发器创建脚本执行此操作。

mysql version-control sql-scripts
4个回答
4
投票

您可以创建数据更改触发器,这会将更改自动存储到某些源代码管理中。但是,没有自动方法来跟踪结构更改(表、存储过程等)。因此,最好的方法可能是转储数据库并将这些转储存储在源代码管理中。您可以定期执行此操作以使事情自动化。


4
投票

根据 Michal 的回答,我到目前为止使用的解决方案是:

#!/bin/bash
BACKUP_PATH=/root/database_name
DATABASE=database_name
PASSWORD=Password
rm -f "$BACKUP_PATH/*.sql"
mysqldump -p$PASSWORD --routines --skip-dump-date --no-create-info --no-data --skip-opt $DATABASE > $BACKUP_PATH/$DATABASE.sql
mysqldump -p$PASSWORD --tab=$BACKUP_PATH --skip-dump-date --no-data --skip-opt $DATABASE
hg commit -Am "automatic commit" $BACKUP_PATH

1
投票

不太明白你想做什么。

看看Liquibase,也许它会满足你的需要......


0
投票

PHP

如果您处于 PHP 环境中,此脚本会将过程和函数存储在单独的 (PHP) 文件中,这些文件可用于生成它们并存储在存储库中。

<?php declare(strict_types=1);

// logon the db user, I'm using a mysqli version here
// PDO will need small adjustments.
require "../inc/config.inc.php";

function show_routine(string $type, string $name) {
  global $db;
  $query = "SHOW CREATE $type `$name`";
  $result = $db->query( $query );
  foreach( $result as $row ) {
    echo "<h1>$name</h1>";
    if( is_null($row["Create $type"]) ) {
      echo "<p>Not found</p>";
      continue;
    }
    $proc   = $row[$type];
    $source = $row["Create $type"];
    $source = preg_replace( "/(DEFINER=`\w*`@`\w*`)/", "/* $1 */", $source );
    echo "<pre>$source</pre>";
    $fh = fopen( "./$type/$name.sql", "w" );
    fwrite( $fh, "DROP $type IF EXISTS `$name`;" . PHP_EOL . PHP_EOL );
    fwrite( $fh, "DELIMITER $$" . PHP_EOL );
    fwrite( $fh, $source );
    fwrite( $fh, "$$" . PHP_EOL );
    fwrite( $fh, "DELIMITER ;" . PHP_EOL );
    fclose( $fh );
  }
}


foreach( $db->query("show procedure status where db = '<your db-scheme>'") as $row ) {
  $name = $row["Name"];
  show_routine("Procedure", $name);
}


foreach( $db->query("show function status where db = '<your-db-scheme>'") as $row ) {
  $name = $row["Name"];
  show_routine("Function", $name);
}

确保 db 用户具有适当的权限。

© www.soinside.com 2019 - 2024. All rights reserved.