Anton Reshetov

FRONT END DEVELOPER / WEB DESIGNER / WORDPRESS

WordPress MySQL Dump Deploy

Долгое время я делал перенос базы данных с локальной разработки на сервер в ручную. Даже когда загрузка по работе была большая.

В конце концов мне все это надоело, я решил автоматизировать процесс. Выбор на чем все это делать не стоял, естественно для меня это был Gulp. Я люблю Gulp! :)

Конфигурация очень простая, всего две зависимости, не считая самого Gulp.

var gulp = require('gulp');
var shell = require('gulp-shell');
var replace = require('gulp-replace');
  • gulp-shell - для запуска консольных команд.
  • gulp-replace - для поиска и замены строк.

Два объекта, локальные и серверные данные для доступа к базе данных:

var local = {
    db: '',
    path: '',
    user: '',
    pass: ''
};

var remote = {
    db: '',
    path: '',
    server: '',
    user: '',
    pass: ''
};
  • local.db = 'mylocalbase'
  • local.path = 'http://site.dev'
  • local.user = 'myuser'
  • local.pass = 'mypassword'
  • remote.db = 'myremotebase'
  • remote.path = 'http://site.com'
  • remote.server = 'server IP'
  • remote.user = 'myuser'
  • remote.pass = 'mypassword'

Все что нужно это заполнить нужными данными и выполнить два таска.

$ gulp dump
$ gulp replace
gulp.task('dump', shell.task([
    'touch ' + local.db + '.sql',
    'mysqldump -u ' + local.user + ' -p' + local.pass + ' ' + local.db + ' > ' + local.db + '.sql'
]));

gulp.task('replace', function () {
    return gulp.src('./' + local.db + '.sql')
        .pipe(replace(local.path, remote.path))
        .pipe(gulp.dest('./'));
});

Gulp выполнит дамп локальной базы, найдет локальные пути и заменит их на серверные.

Первая часть автоматизации завершена.

Вторая чуть посложнее. Необходимо настроить MySQL на сервере.

$ nano /etc/mysql/my.cnf

В открывшемся конфигурационном файле нужно найти bind-address и заменить локальный адрес на 0.0.0.0, для того что можно было подключаться к MySQL удаленно.

Далее зайти в MySQL и выполнить команду:

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Где myuser и mypassword это ваш логин и пароль юзера которому Вы даете полные права к базе данных.

Затем нужно перезапустить MySQL:

$ sudo service mysql restart

Если на сервере стоит firewall, то возможно понадобиться добавить свой IP в исключение.

$ sudo ufw allow from IP_FROM_YOU_CONNECT to any port 3306

Ну вот и все, осталось запустить последний таск:

$ gulp deploy
gulp.task('deploy', shell.task([
    'mysql -u ' + remote.user + ' -p' + remote.pass + ' -h ' + remote.server + ' ' + remote.db + ' < ' + local.db + '.sql'
]));

Gulp выполнит подключение к серверу и зальет базу данных. 🍻

Готовый код Вы можете скачать с репозитория на GitHub.