×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Text
Posted by: Roman Ignatov
Added: Nov 22, 2016 4:50 PM
Views: 9
Tags: mysql
  1. Работа с бекапами
  2.  
  3.  
  4. Делаем бекап
  5. mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql
  6.  
  7. Создаём структуру базы без данных
  8. mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql
  9.  
  10. Если нужно сделать дамп только одной или нескольких таблиц
  11. mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql
  12.  
  13. Создаём бекап и сразу его архивируем
  14. mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz
  15.  
  16. Создание бекапа с указанием его даты
  17. mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`
  18.  
  19. Заливаем бекап в базу данных
  20. mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql
  21.  
  22. Заливаем архив бекапа в базу
  23. gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
  24. или так
  25. zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
  26.  
  27. Создаём новую базу данных
  28. mysqladmin -u USER -pPASSWORD create NEWDATABASE
  29.  
  30. Удобно использовать бекап с дополнительными опциями -Q -c -e, т.е.
  31. mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql, где:
  32. -Q оборачивает имена обратными кавычками
  33. -c делает полную вставку, включая имена колонок
  34. -e делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрее
  35.  
  36.  
  37. Для просмотра списка баз данных можно использовать команду:
  38. mysqlshow -u USER -pPASSWORD
  39.  
  40. А так же можно посмотреть список таблиц базы:
  41. mysqlshow -u USER -pPASSWORD DATABASE
  42.  
  43. Для таблиц InnoDB надо добавлять --single-transaction, это гарантирует целостность данных бекапа.
  44. Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.
  45.  
  46. Подробнее
  47.  
  48. Общие факты
  49.  
  50. Полезно под каждую базу на боевом сервере создавать своего пользователя
  51. Кодировка базы может быть любой, если она UTF8
  52. В большинстве случаев лучше использовать движок InnoDB
  53. В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli
  54. Новую копию MySQL всегда можно настроить и оптимизировать
  55. Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов
  56. ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST
  57.  
  58.  
  59. Работа с данными
  60.  
  61.  
  62. Числа
  63.  
  64. На 32-битных системах практически нет смысла ставить для типа INTEGER свойство UNSIGNED, так как такие большие числа в php не поддерживаются.
  65. На 64-битных системах, php поддерживает большие числа, вплоть до MySQL BIGINT со знаком.
  66. Связанные таблицы («Foreign keys») должны иметь полное сходство по структуре ключей. Т.е. если у нас на одной таблице для поля указано «INTEGER UNSIGNED DEFAULT 0 NOT NULL» то и на другой должно быть указано аналогично
  67. Для хранения булевых значений, нужно использовать TINYINT(1)
  68. А деньги лучше хранить в DECIMAL(10, 2), где первое число обозначает количество всех знаков, включая запятую, а второе — количество знаков после запятой. Итого, у нас получится что DECIMAL(10,2) может сохранить 9999999,99
  69.  
  70.  
  71. Строки
  72.  
  73. В старых версиях (до 5.0.3) VARCHAR была ограничена 255 символами, но сейчас можно указывать до 65535 символов
  74. Помните, что тип TEXT ограничен только 64 килобитами, поэтому что бы сохранять «Войну и Мир» пользуйтесь «LONGTEXT»
  75. Самая правильная кодировка для вашей БД UTF8
  76.  
  77.  
  78. Даты
  79.  
  80. Не забывайте, что
  81. DATE, TIME, DATETIME — выводятся в виде строк, поэтому поиск и сравнение дат происходит через преобразование
  82. TIMESTAMP — хранится в виде UNIX_TIMESTAMP, и можно указать автоматически обновлять колонку
  83. Сравнивая типы данных DATETIME и TIMESTAMP, не забывайте делать преобразование типов, например:
  84. SELECT * FROM table WHERE `datetime` = DATE(`timestamp`)
  85.  
  86.  
  87. Отладка
  88.  
  89.  
  90. Если запросы тормозят, то можно включить лог для медленных запросов в /etc/mysql/my.cnf
  91. А потом оптимизировать запросы через EXPLAIN
  92. И наблюдать за запросами удобно через программу mytop