Показаны сообщения с ярлыком mysql. Показать все сообщения
Показаны сообщения с ярлыком mysql. Показать все сообщения

MySQL импорт

Скажем, что для создания mysql дампа мы используем такую команду:

mysqldump -udemo -p12345 --routines demo_db | gzip -9 > dump.sql.gz

В результате мы получим dump.sql.gz архив, который впоследствии можем импортировать двумя способами:

# импорт через распаковку
gunzip dump.sql.gz && mysql -u{name} -p{password} {db_name} < dump.sql

# импорт через пайп
gunzip < dump.sql.gz | mysql -u{name} -p{password} {db_name}

А теперь, используя комманду time, засечем время выполнения каждого из способов. Для каждого из них я пересоздавал базу. В дампе находятся не только структура базы, но и тестовые данные. Размер файлов представлен ниже. И разница в том, что во втором случае архив остается на месте.

# 81.9 MB - dump.sql дамп
# 11.8 MB - dump.sql.gz архив

# импорт через распаковку
time (gunzip dump.sql.gz && mysql -udemo -p12345 demo_db < dump.sql)

real 1m9.599s
user 0m2.499s
sys  0m0.245s

# импорт через пайп
time (gunzip < dump.sql.gz | mysql -udemo -p12345 demo_db)

real 1m7.093s
user 0m2.536s
sys  0m0.193s

Mysql и конвертация времени

Что если необходимо хранить время в базе данных в GMT, а клиенту отдавать в GMT+1. Как обеспечить корректную конвертацию времени и оставить код прозрачным? Этот вариант решения заключаться в том, чтобы правильно настроить java mysql connector для конвертации времени.

Что необходимо добиться:
  1. В базе время хранится в GMT; 
  2. При запросах время получаем в GMT+1 (+01:00); 
  3. При сохранении время из GMT+1 конвертируется в GMT.

Что для этого необходимо настроить:
  1. Часовой пояс GMT для mysql сервера:
    mysql> set global time_zone = '+00:00';
    mysql> set time_zone = '+00:00';
    
    Проверить настройки можно так:
    mysql> select now();
    mysql> select @@global.time_zone, @@session.time_zone, @@system_time_zone;
    
  2. Задать параметр -Duser.timezone=GMT+1 в файле setenv.sh и setenv.bat. Например:
    # file setenv.sh
    JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT ..."
    
    Это надо сделать только если необходимо вручную задать часовой пояс в котором работает приложение, иначе пропустить этот шаг;
  3. Перейти к строке с настройкой jdbc.default.url и добавить параметр useTimezone=true. Например:
    jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false&useTimezone=true
    
  4. Готово, запускаем и проверяем.
Эти настройки mysql базы будут работать до ее перезапуска. После перезапуска время снова будет системным. Этого можно избежать вручную указав параметр --default-time-zone='+00:00' при запуске mysql сервера. Либо снова выполнить шаг 1 и 2.

Официальная документация:
http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html