суббота, 11 июня 2011 г.

Скрипт для автоматизации выполнения типовых операций в MySQL

Последнее время мне приходится достаточно часто создавать базы данных MySQL, назначать гранты для доступа, редактировать структуру таблиц, чтобы не держать информацию о базе данных в голове о текущей базе данных, префиксах и кодировке я использую следующий скрипт для создания БД и таблиц:


$ cat execute.sql.sh
#!/bin/bash

# Переменные, которые будут использованы для подстановки в скриптах sql
USER=myuser
HOST=localhost
DATABASE=mydb
PASSWORD=mypassword
TYPE=InnoDB
ENCODING=utf8
COLLATE=utf8_general_ci
T=

#Переменные для установки соединения с правами привилегированного пользователя.
MYSQL=mysql
MYSQL_OPTIONS=-vvf
MYSQL_ROOT=root
MYSQL_PASS=
MYSQL_HOST=$HOST
MYSQL_PORT=

LOG=execute.sql.log

function __replace_symbols
{
    if [ -f $1  ]
    then
        sed                         \
            -e "s/@@USER@@/${USER}/"        \
            -e "s/@@HOST@@/${HOST}/"        \
            -e "s/@@DATABASE@@/${DATABASE}/"    \
            -e "s/@@PASSWORD@@/${PASSWORD}/"    \
            -e "s/@@TYPE@@/${TYPE}/"        \
            -e "s/@@ENCODING@@/${ENCODING}/"    \
            -e "s/@@COLLATE@@/${COLLATE}/"        \
            -e "s/@@T@@/${T}/"            \
            $1
    else
        echo "$1 not exists"
    fi
}

echo "========================= $(date) ========================" >> $LOG
for sql in $*
do
    __replace_symbols $sql | $MYSQL $MYSQL_OPTIONS -u $MYSQL_ROOT -h $MYSQL_HOST
done

Для использования создается набор скриптов DDL/DML например таких:

$ cat 000_create_database.sql
create database @@DATABASE@@ CHARACTER SET '@@ENCODING@@' COLLATE '@@COLLATE@@';

$ cat 000_create_user.sql
create user '@@USER@@'@'@@HOST@@' identified by '@@PASSWORD@@';

$ cat 000_grant_privileges.sql
grant all privileges on `@@DATABASE@@`.* to '@@USER@@'@'@@HOST@@';

$ cat 001_auth.sql
use @@DATABASE@@
set names '@@ENCODING@@';

CREATE TABLE IF NOT EXISTS `roles` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `description` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uniq_name` (`name`)
) ENGINE=@@TYPE@@  DEFAULT CHARSET=@@ENCODING@@;
...

Чтобы создать базу, пользователя и таблицы выполните:

$ ./execute.sql.sh 000_create_database.sql 000_create_user.sql 000_grant_privileges.sql 001_auth.sql

Лично мне данный скрипт очень упрощает жизнь. Надеюсь, пригодится и вам.

Комментариев нет:

Отправить комментарий