- +

Автор: sasha300 Тема: Не получается перенси базу MySQL в другую директорию  (Прочитано 461 раз)

Тема содержит ответ помеченный, как лучший. Нажмите сюда, если хотите его увидеть.

Оффлайн sasha300

  • Начинающий
  • *
  • Сообщений: 7
  • Репутация: +0/-0
    • Просмотр профиля
Приветствую!
Уже неделю пытаюсь перенести базу MySQL в директорию /home/sas но ничерта не получается  :angry:
Порядок действий:
останавливаю MySQL:
sudo service mysql stop
перемещаю базы в требуемую директорию:
sudo mv /var/lib/mysql /home/sas
и вот тут начинается самое интересное. Во многих мануалах пишут
Цитировать
Меняем в файле конфигурации местоположение базы,
для этого открываем файл /etc/mysql/my.cnf,
находим в нем строчку:
datadir = /var/lib/mysql  и меняем в ней путь на новый:
Но загвоздка в том, что datadir не существует! Ладно, создаю и в итоге получаю такой файл (закомментированные строки пропустил):
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
datadir = /home/sas/mysql
проверяю права на папку и вижу, что все в порядке:
drwx------  6 mysql mysql  4096 май 23 11:40 mysql
они 700, и пользователь:группа mysql:mysql - все ок.
Теперь запускаю MySQL:
sudo service mysql start
и получаю ошибку:
Цитировать
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
При команде
systemctl status mysql.service
получаю:
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
   Active: inactive (dead) (Result: exit-code) since Вт 2017-05-23 12:13:31 MSK;
  Process: 2161 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=ex
  Process: 2160 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
  Process: 2678 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exit
 Main PID: 2160 (code=exited, status=0/SUCCESS)

май 23 12:13:31 k43e systemd[1]: mysql.service: Unit entered failed state.
май 23 12:13:31 k43e systemd[1]: mysql.service: Failed with result 'exit-code'.
май 23 12:13:31 k43e systemd[1]: mysql.service: Service hold-off time over, sche
май 23 12:13:31 k43e systemd[1]: Stopped MySQL Community Server.
май 23 12:13:31 k43e systemd[1]: mysql.service: Start request repeated too quick
май 23 12:13:31 k43e systemd[1]: Failed to start MySQL Community Server.

а при команде
journalctl -xe
получаю:
май 23 12:13:31 k43e systemd[1]: mysql.service: Service hold-off time over, scheduling restart.
май 23 12:13:31 k43e systemd[1]: Stopped MySQL Community Server.
-- Subject: Завершена остановка юнита mysql.service.
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Процесс остановки юнита mysql.service был завершен.
май 23 12:13:31 k43e systemd[1]: mysql.service: Start request repeated too quickly.
май 23 12:13:31 k43e systemd[1]: Failed to start MySQL Community Server.
-- Subject: Ошибка юнита mysql.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Произошел сбой юнита mysql.service.
--
-- Результат: failed.
май 23 12:13:49 k43e dhclient[1041]: DHCPREQUEST of 192.168.0.102 on wlp2s0 to 192.168.0.100 port 67 (xid=0x749eab50)
май 23 12:13:49 k43e dhclient[1041]: DHCPACK of 192.168.0.102 from 192.168.0.100
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3843]   address 192.168.0.102
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3844]   plen 24 (255.255.255.0)
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3844]   gateway 192.168.0.100
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3845]   server identifier 192.168.0.100
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3845]   lease time 600
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3845]   nameserver '192.168.0.100'
май 23 12:13:49 k43e NetworkManager[691]: <info>  [1495530829.3846] dhcp4 (wlp2s0): state changed bound -> bound
май 23 12:13:49 k43e dbus[679]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
май 23 12:13:49 k43e systemd[1]: Starting Network Manager Script Dispatcher Service...
-- Subject: Начинается запуск юнита NetworkManager-dispatcher.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Начат процесс запуска юнита NetworkManager-dispatcher.service.
май 23 12:13:49 k43e dbus[679]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
май 23 12:13:49 k43e systemd[1]: Started Network Manager Script Dispatcher Service.
-- Subject: Запуск юнита NetworkManager-dispatcher.service завершен
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Процесс запуска юнита NetworkManager-dispatcher.service был завершен.
--
-- Результат: done.
май 23 12:13:49 k43e nm-dispatcher[2691]: req:1 'dhcp4-change' [wlp2s0]: new request (1 scripts)
май 23 12:13:49 k43e nm-dispatcher[2691]: req:1 'dhcp4-change' [wlp2s0]: start running ordered scripts...
май 23 12:13:49 k43e dhclient[1041]: bound to 192.168.0.102 -- renewal in 250 seconds.
май 23 12:17:01 k43e CRON[2721]: pam_unix(cron:session): session opened for user root by (uid=0)
май 23 12:17:01 k43e CRON[2722]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
май 23 12:17:01 k43e CRON[2721]: pam_unix(cron:session): session closed for user root
Что-то мне подсказывает, что трабл с файлом /etc/mysql/my.cnf, что там отсутствовала datadir
Знает кто в чем трабл?

Оффлайн oermolaev

  • Начинающий
  • *
  • Сообщений: 41
  • Репутация: +6/-0
    • Просмотр профиля
и в итоге получаю такой файл (закомментированные строки пропустил):
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
datadir = /home/sas/mysql

это у вас всего три строки в конфиге /etc/mysql/my.cnf ?

Оффлайн sasha300

  • Начинающий
  • *
  • Сообщений: 7
  • Репутация: +0/-0
    • Просмотр профиля
да, всего-лишь 3 строчки. Все остальные закомментированные строки не приводил

Отмечено, как лучший ответ пользователем sasha300 Май 24, 2017, 13:18:59

Оффлайн oermolaev

  • Начинающий
  • *
  • Сообщений: 41
  • Репутация: +6/-0
    • Просмотр профиля
Но загвоздка в том, что datadir не существует!

Полагаю, этот и другие параметры находятся у вас в конфигурационном файле:
/etc/mysql/mysql.conf.d/mysqld.cnf
« Последнее редактирование: Май 24, 2017, 08:18:51 от oermolaev »

Оффлайн sasha300

  • Начинающий
  • *
  • Сообщений: 7
  • Репутация: +0/-0
    • Просмотр профиля
В файле /etc/mysql/mysql.conf.d/mysqld.cnf действительно содержалась директива datadir
Нужно поменять путь к базе MySQL, т.е. надо заменить 
datadir = /var/lib/mysql
на
datadir		= /home/sas/mysql
В итоге файл принял следующий вид (привожу со всеми закомментированными строками):
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /home/sas/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options  = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size        = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size   = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

Затем пробую стартануть MySQL, но опять вываливается ошибка:
sas@k43e:~$ sudo service mysql start
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
При наборе systemctl status mysql.service получаю:
mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: activating (start-post) (Result: exit-code) since Ср 2017-05-24 11:19:27 MSK; 15s ago
  Process: 3958 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
  Process: 3951 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 3958 (code=exited, status=1/FAILURE);         : 3959 (mysql-systemd-s)
   CGroup: /system.slice/mysql.service
           └─control
             ├─3959 /bin/bash /usr/share/mysql/mysql-systemd-start post
             └─4004 sleep 1

май 24 11:19:27 k43e systemd[1]: Starting MySQL Community Server...
май 24 11:19:28 k43e systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Теперь вылезает только одна ошибка, типа "mysql.service: главный процесс истек", как победить трабл?
p.s: может сокет mysqld.sock должен быть не в директории /var/run/mysqld/, а в /home/sas/mysql ?
« Последнее редактирование: Май 24, 2017, 10:36:11 от sasha300 »

Оффлайн oermolaev

  • Начинающий
  • *
  • Сообщений: 41
  • Репутация: +6/-0
    • Просмотр профиля

Оффлайн sasha300

  • Начинающий
  • *
  • Сообщений: 7
  • Репутация: +0/-0
    • Просмотр профиля
Разобрался. В инструкции https://www.digitalocean.com/community/tutorials/how-to-move-a-mysql-data-directory-to-a-new-location-on-ubuntu-16-04 сказано:
Цитировать
We’ll need to tell AppArmor to let MySQL write to the new directory by creating an alias between the default directory and the new location. To do this, edit the AppArmor alias file:
sudo nano /etc/apparmor.d/tunables/alias
At the bottom of the file, add the following alias rule:
/etc/apparmor.d/tunables/alias
. . .
alias /var/lib/mysql/ -> /mnt/volume-nyc1-01/mysql/,
Ну я там добавил строчку:
alias /var/lib/mysql/ -> /home/sas/mysql/,
Затем
sudo systemctl restart apparmor
и
sudo service mysql start
Сам не поверил  :smile:
Когда успешно зашел в phpmyadmin, то понял, что все нормуль
Сегодня Клонзиллой опять бахну систему до изначального состояния и последовательно пройдусь во всем пунктам, дабы понять, что последовательность действий правильна.



Оффлайн sasha300

  • Начинающий
  • *
  • Сообщений: 7
  • Репутация: +0/-0
    • Просмотр профиля
Но тогда пару вопросов:
1. Почему в большинстве инструкций написано, что надо менять файл /etc/mysql/my.cnf (который, кстати, линкованный и ведет к /etc/alternatives/my.cnf),  а по факту надо было менять /etc/mysql/mysql.conf.d/mysqld.cnf ?
2. Зачем нужен сокет? Эта типа дамп/swap файл для MySQL? Ничего, что он создается в /var/run/mysqld, а сам MySQL в /home/sas/mysql?

Оффлайн oermolaev

  • Начинающий
  • *
  • Сообщений: 41
  • Репутация: +6/-0
    • Просмотр профиля
1. Потому что раньше (в Ubuntu 14.04 например) конфигурационный файл находился именно там. А в 16.04 в этом файле указаны ссылки на каталог /etc/mysql/mysql.conf.d/. Всё течёт, всё изменяется.
2. Сокет (программный интерфейс)

Оффлайн sasha300

  • Начинающий
  • *
  • Сообщений: 7
  • Репутация: +0/-0
    • Просмотр профиля
Только что опять повторил все шаги на новой Xubuntu - базы MySQL замечательно перенеслись. oermolaev спасибо за подсказки!