Esta é uma boa resposta, mas você pode precisar de mais uma etapa para permitir que os clientes se conectem ao mysql. Adicione um novo grupo com uma linha abaixo dela ... [clients] socket = / array2 / mysql / mysql.sock em que a parte socket = aponta para o novo local do seu arquivo mysql.sock.
Coruja da noite
11
Se você não quer se incomodar em mesclar /etc/apparmor.d/usr.sbin.mysqldcada vez que o mysql recebe uma atualização, você pode adicioná /array2/mysql/** rwk,-lo /etc/apparmor.d/local/usr.sbin.mysqld. O Mysql ainda terá acesso ao diretório de dados antigo, mas isso provavelmente não é um problema.
22413 drevicko
sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf. Por que apenas as pastas do banco de dados?
int_ua
Para qualquer pessoa que mova o datadir para o ZFS (como eu fiz), adicione também: innodb_use_native_aio=0na [mysqld]seção do seu my.cnfarquivo, pois o ZFS no linux não suporta o AIO. dev.mysql.com/doc/refman/5.5/en/…
Andrew Ensley
23
Eu descobri que o AppArmor era o culpado examinando o sysloge consegui alterar com êxito o mysqllocal dos dados seguindo este processo.
Observe que, nos arquivos editados abaixo, as linhas iniciadas com +foram adicionadas e as linhas iniciadas com -foram removidas. Na verdade, você não deve digitar / colar os +sinais ao adicionar linhas a esses arquivos.
Eu clonei o mysqldiretório no novo local:
sudo rsync -av /var/lib/mysql /new_dir
Depois editei a datadirlinha em /etc/mysql/my.cnf:
Se você mover o datadir, não precisará apenas conceder as novas permissões ao datadir, mas também garantir que todos os diretórios-pai tenham permissão.
Mudei meu datadir para um disco rígido, montado no Ubuntu como:
/media/*user*/Data/
e meu datadir eram bancos de dados .
Eu tive que definir permissões para 771 para cada um dos diretórios de mídia, usuário e dados:
sudo chmod 771 *DIR*
Se isso não funcionar, outra maneira de fazer o mysql funcionar é mudar o usuário em /etc/mysql/my.cnf para root; embora não haja dúvida de alguns problemas ao fazer isso do ponto de vista da segurança.
Eu prefiro usar mount com opção de ligação, para evitar outras alterações na configuração do Apparmor e Mysql.
Por exemplo:
Suponha que eu queira mudar tudo /var/www. Digamos que esse diretório seja meu ambiente de desenvolvimento e esteja montado em uma partição diferente
Primeiro precisamos parar o mysql :
sudo systemctl stop mysql.service
Nós movemos arquivos (preservando a permissão)
sudo rsync -av /var/lib/mysql /var/www
Isso irá gerar um diretório /var/www/mysql/com todo o conteúdo.
Nós removemos tudo no diretório antigo:
sudo rm -r /var/lib/mysql/*
Montamos o novo diretório com a bindopção no antigo.
edite /etc/fstabe adicione esta linha:
/var/www/mysql /var/lib/mysql none bind 0 0
Isso irá montar o /var/www/mysqldiretório vazio. /var/lib/mysql
A bindopção aqui faz a mágica, ela será preenchida /var/lib/mysqlcom o conteúdo de /var/www/mysqlmodo que, para o mysql e o apparmor, será como se nada tivesse mudado.
Você percebe que se seguir os comandos literalmente da resposta aceita, ele falhará?
cp -R / var / lib / mysql / array2 / mysql
Copiará / var / lib / mysql para / array2 / mysql / mysql.
Quando você define seu arquivo de configuração, é melhor colocar / array2 / mysql / mysql como o diretório, caso contrário seu mysqld falhará ao iniciar.
Os melhores comandos de cópia seriam:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / usuários / array2 / mysql
/etc/apparmor.d/usr.sbin.mysqld
cada vez que o mysql recebe uma atualização, você pode adicioná/array2/mysql/** rwk,
-lo/etc/apparmor.d/local/usr.sbin.mysqld
. O Mysql ainda terá acesso ao diretório de dados antigo, mas isso provavelmente não é um problema.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
. Por que apenas as pastas do banco de dados?innodb_use_native_aio=0
na[mysqld]
seção do seumy.cnf
arquivo, pois o ZFS no linux não suporta o AIO. dev.mysql.com/doc/refman/5.5/en/…Eu descobri que o AppArmor era o culpado examinando o
syslog
e consegui alterar com êxito omysql
local dos dados seguindo este processo.Observe que, nos arquivos editados abaixo, as linhas iniciadas com
+
foram adicionadas e as linhas iniciadas com-
foram removidas. Na verdade, você não deve digitar / colar os+
sinais ao adicionar linhas a esses arquivos.Eu clonei o
mysql
diretório no novo local:Depois editei a
datadir
linha em/etc/mysql/my.cnf
:Então eu editei
/etc/apparmor.d/usr.sbin.mysqld
:Então eu reiniciei
mysql
.fonte
Estar ciente.
Se você possui tabelas InnoDB, DEVE copiar os arquivos
ibdata*
e, casoib_logfile*
contrário não poderá usá-las. Você vai ter:erros.
Execute este comando de cópia para copiar os arquivos
ibdata*
eib_logfile*
.fonte
Eu apenas tentei de outra maneira, que alguns podem achar útil:
copie com as permissões intactas:
fazer backup (caso algo dê errado):
crie um novo diretório vazio no lugar do antigo:
bind monte o novo local no antigo:
Espero que ajude alguém, porque o link simbólico não funcionou para mim e essa foi a maneira mais simples
fonte
Se você mover o datadir, não precisará apenas conceder as novas permissões ao datadir, mas também garantir que todos os diretórios-pai tenham permissão.
Mudei meu datadir para um disco rígido, montado no Ubuntu como:
e meu datadir eram bancos de dados .
Eu tive que definir permissões para 771 para cada um dos diretórios de mídia, usuário e dados:
Se isso não funcionar, outra maneira de fazer o mysql funcionar é mudar o usuário em /etc/mysql/my.cnf para root; embora não haja dúvida de alguns problemas ao fazer isso do ponto de vista da segurança.
fonte
Eu prefiro usar mount com opção de ligação, para evitar outras alterações na configuração do Apparmor e Mysql.
Por exemplo:
Suponha que eu queira mudar tudo
/var/www
. Digamos que esse diretório seja meu ambiente de desenvolvimento e esteja montado em uma partição diferentePrimeiro precisamos parar o mysql :
Nós movemos arquivos (preservando a permissão)
Isso irá gerar um diretório
/var/www/mysql/
com todo o conteúdo.Nós removemos tudo no diretório antigo:
Montamos o novo diretório com a
bind
opção no antigo.edite
/etc/fstab
e adicione esta linha:Isso irá montar o
/var/www/mysql
diretório vazio./var/lib/mysql
A
bind
opção aqui faz a mágica, ela será preenchida/var/lib/mysql
com o conteúdo de/var/www/mysql
modo que, para o mysql e o apparmor, será como se nada tivesse mudado.Agora fazemos a montagem:
e reinicie o mysql.
fonte
Você percebe que se seguir os comandos literalmente da resposta aceita, ele falhará?
cp -R / var / lib / mysql / array2 / mysql
Copiará / var / lib / mysql para / array2 / mysql / mysql.
Quando você define seu arquivo de configuração, é melhor colocar / array2 / mysql / mysql como o diretório, caso contrário seu mysqld falhará ao iniciar.
Os melhores comandos de cópia seriam:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / usuários / array2 / mysql
Apenas meus 2 centavos no valor.
fonte