Não é possível mover os dados do MySQL para o drive externo

1

Eu não consigo iniciar o mysql depois de mover os dados para o disco rígido externo.

Minha configuração (Raspbian):

  • Pasta de dados padrão do MySQL: / var / lib / mysql
  • Pasta de dados do MySQL de destino: / media / exthdd / mysql_data

E foi assim que tentei realocar meus dados do mysql:

  1. sudo service mysql stop
  2. sudo mkdir /media/exthdd/mysql_data
  3. sudo cp -adR /var/lib/mysql/ /media/exthdd/mysql_data
  4. sudo chown mysql:mysql -R /media/exthdd/mysql_data
  5. sudo chmod 771 -R /media/exthdd/mysql_data/
  6. sudo nano /etc/mysql/my.cnf
  7. datadir = /media/exthdd/mysql_data
  8. sudo service mysql start

Este é o erro que recebi depois:

Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.

Em execução, journalctl -xn recebi:

No journal files were found.

Para systemctl status mysql.service

mysql.service - LSB: Start and stop the mysql database server daemon

Loaded: loaded (/etc/init.d/mysql)

Active: failed (Result: exit-code) since Sat 2016-08-20 18:58:48 CST; 2min 4s ago

Process: 27436 ExecStop=/etc/init.d/mysql stop (code=exited, status=0/SUCCESS)

Process: 373 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)

E o log de erros sudo cat /var/log/mysql/error.log tinha isso:

160820 19:05:50 mysqld_safe Starting mysqld daemon with databases from /media/exthdd/mysql_data

160820 19:05:50 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

160820 19:05:50 [Note] /usr/sbin/mysqld (mysqld 5.5.49-0+deb8u1) starting as process 2403 ...

160820 19:05:50 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.

160820 19:05:50 [Note] Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist

160820 19:05:50 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

160820 19:05:50 InnoDB: The InnoDB memory heap is disabled

160820 19:05:50 InnoDB: Mutexes and rw_locks use GCC atomic builtins

160820 19:05:50 InnoDB: Compressed tables use zlib 1.2.8

160820 19:05:50 InnoDB: Using Linux native AIO

160820 19:05:50 InnoDB: Initializing buffer pool, size = 128.0M

160820 19:05:50 InnoDB: Completed initialization of buffer pool

160820 19:05:50 InnoDB: highest supported file format is Barracuda. InnoDB: Log scan progressed past the checkpoint lsn 49439

160820 19:05:50 InnoDB: Database was not shut down normally! InnoDB: Starting crash recovery. InnoDB: Reading tablespace information from the .ibd files... InnoDB: Restoring possible half-written data pages from the doublewrite InnoDB: buffer... InnoDB: Doing recovery: scanned up to log sequence number 1595675

160820 19:05:51 InnoDB: Starting an apply batch of log records to the database... InnoDB: Progress in percents: 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 InnoDB: Apply batch completed

160820 19:05:51 InnoDB:Waiting for the background threads to start

160820 19:05:52 InnoDB: 5.5.49 started; log sequence number 1595675

160820 19:05:52 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306

160820 19:05:52 [Note] - '127.0.0.1' resolves to '127.0.0.1';

160820 19:05:52 [Note] Server socket created on IP: '127.0.0.1'.

160820 19:05:52 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

160820 19:05:52 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[UPDATE] Eu atualizei o mysql para 5.6.30-1, mas o problema persiste (embora os erros sejam diferentes agora). Além disso, não fique confuso, eu fiz um link simbólico de / var / lib / mysql - > / media / exthdd / mysql

orangepi@OrangePI:/var/lib/mysql$ sudo service mysql start orangepi@OrangePI:/var/lib/mysql$ sudo service mysql status

● mysql.service - MySQL Community Server

Loaded: loaded (/lib/systemd/system/mysql.service; enabled)

Active: inactive (dead) since Mon 2016-08-22 03:55:30 CST; 40s ago

Process: 8151 ExecStartPost=/usr/share/mysql/mysql-systemd-start post >(code=exited, status=0/SUCCESS)

Process: 8150 ExecStart=/usr/bin/mysqld_safe (code=exited, status=0/SUCCESS)

Process: 8148 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre >(code=exited, status=0/SUCCESS) Main PID: 8150 (code=exited, status=0/SUCCESS)

Aug 22 03:55:00 OrangePI mysqld_safe[8150]: 160822 03:55:00 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configura...ke effect.

Aug 22 03:55:00 OrangePI mysqld_safe[8150]: 160822 03:55:00 mysqld_safe Logging to '/var/log/mysql/error.log'.

Aug 22 03:55:00 OrangePI mysqld_safe[8150]: 160822 03:55:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Aug 22 03:55:00 OrangePI mysqld_safe[8150]: 160822 03:55:00 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Aug 22 03:55:30 OrangePI systemd[1]: Started MySQL Community Server. Hint: Some lines were ellipsized, use -l to show in full.

E novamente log de erros:

orangepi@OrangePI:/var/lib/mysql$ sudo cat /var/log/mysql/error.log

160822 03:55:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

2016-08-22 03:55:00 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

2016-08-22 03:55:00 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2016-08-22 03:55:00 0 [Note] /usr/sbin/mysqld (mysqld 5.6.30-1) starting as process 8516 ...

2016-08-22 03:55:00 8516 [Warning] Can't create test file /var/lib/mysql/OrangePI.lower-test

2016-08-22 03:55:00 8516 [Warning] Can't create test file /var/lib/mysql/OrangePI.lower-test /usr/sbin/mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

2016-08-22 03:55:00 8516 [ERROR] Aborting

2016-08-22 03:55:00 8516 [Note] Binlog end

2016-08-22 03:55:00 8516 [Note] /usr/sbin/mysqld: Shutdown complete

160822 03:55:00 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Ele diz que não pode criar um arquivo de teste, mas o mysql tem todas as permissões e possui toda a pasta / arquivos mysql.

    
por Tomas Stibrany 20.08.2016 / 23:56

2 respostas

1

Seu problema é que uma tabela mysql do banco de dados mysql principal está ausente ou corrompida. Mais provavelmente não foi copiado. A tabela em questão é mysql.host

primeiro, assegure-se de que todos os arquivos, em /var/lib/mysql , foram copiados, especificamente os arquivos e diretórios que não fazem parte dos bancos de dados que você criou. Desde que você está usando o MySQL 5.5.49, que é uma versão antiga. Eu recomendo atualizar seu servidor para uma versão mais estável. Versão estável atual atualizada é 5.7.14

A versão 5.6.7 e superior não usa mais esta tabela, portanto, se você atualizar para esta versão ou superior, você pode usar apenas o comando mysql_upgrade para atualizar seus bancos de dados e deve retornar o seu servidor ao funcionamento.

Mas se por algum motivo você deve usar as versões do MySQL 5.5, existe o MySQL 5.5.51, que é a última versão estável do branch 5.5. Há algumas opções que você pode tentar. Você pode usar mysql_install_db para tentar recriar o banco de dados MySQL. Ou, se isso não funcionar, você terá que remover o banco de dados MySQL e reinstalar o servidor para regenerá-las.

Só para ficar claro, o banco de dados a que estou me referindo é o banco de dados principal do MySQL que contém informações sobre o servidor, bem como sobre os usuários, etc. Não foram criados seus Bancos de Dados.

    
por 21.08.2016 / 00:34
0

Resolvido!

Não era o apparmor (SELinux, nem as permissões para /temp , eram permissões para a pasta pai do meu disco rígido externo .

Então, fique claro para os futuros leitores:

Eu queria mover os dados do mysql de /var/lib/mysql para /media/exthdd/mysql_data .

Depois que eu movi os dados, defini corretamente as permissões mysql para a pasta mysql_data

drwxrwx--- 7 mysql mysql 4096 Aug 22 20:52 mysql_data

MAS as permissões /media/exthdd da pasta pai excluíram mysql .

drwxrwx--- 4 orangepi www-data 4096 Aug 22 20:28 owncloud

Então, agora eu tinha duas opções:

  1. Permitir acesso a exthdd para todos os usuários (chmod 777)
  2. Adicione mysql ao grupo www-data (o grupo www-data possui o diretório)

Eu fui com a segunda opção:

sudo usermod -a -G www-data mysql

E viola!

sudo service mysql start

sudo service mysql status

mysql.service - MySQL Community Server

Loaded: loaded (/lib/systemd/system/mysql.service; enabled)

Active: active (running) since Mon 2016-08-22 21:03:52 CST; 3s ago

(Desde que @Frostalf foi muito útil eu aceitei sua resposta)

    
por 22.08.2016 / 15:24

Tags