O exemplo acima não conseguiu resolver o problema para mim no Ubuntu 12.04 (Precise). Eu descobri que é necessário editar o arquivo /etc/apparmor.d/tunables/alias para incluir uma linha "alias / var / lib / mysql / -> / newpath /", com isso no lugar, não era necessário alterações em qualquer um dos outros arquivos do AppArmor. Ele funcionou imediatamente após reiniciar o AppArmor com "/etc/init.d/apparmor restart" e o MySQL com "restart mysql".
na edição de mak (que é necessário) não se esqueça da vírgula no final da linhaalias /var/lib/mysql/ -> /newpath/,
Michael
4
Não posso enfatizar o suficiente a importância do comentário de Michel acima: ADICIONE Vírgula e economize alguns neurônios. Desculpe pelas tampas.
alx
2
Não funciona para mim. Eu recebo o trabalho para mysql.service falhou. Consulte 'status do systemctl mysql.service' e 'journalctl -xn' para obter detalhes ao tentar reiniciar o mysqld, e o erro é que o disco está cheio. Tem 500 GB de espaço livre ...
Frank H.
17
Rápido e fácil de fazer:
#Create new directory for MySQL data
mkdir /new/dir/for/mysql
#Set ownership of new directory tomatch existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql#Set permissions on new directory tomatch existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql# Stop MySQL before copying over files
service mysql stop
# Copy all files indefault directory,to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Edite o /etc/my.cnfarquivo e, em seguida, [mysqld]adicione esta linha:
datadir=/new/dir/for/mysql/
Se você estiver usando o CageFS (com ou sem CloudLinux) e quiser alterar o diretório MySQL, DEVE adicionar o novo diretório a este arquivo:
Muito obrigado e, para adicionar, se você quiser criar um script completamente como eu, você pode usar o seguinte: sed -i's | datadir = / var / lib / mysql | datadir = / data / var / lib / mysql | g '/ etc / my.cnf
berimbolo
Isso não funcionou para mim. Eu tentei isso e muitas outras alternativas diferentes. Estou chegando à mesma conclusão que user3338098 quando ele diz que esta é a única maneira que funciona: serverfault.com/questions/503887/…
Volksman
@Volksman tudo o que esse link diz é que ele teve que remover e reinstalar ... é provável que ambos tenham algum outro problema específico do servidor, pois o MySQL e o MariaDB suportam a configuração do datadir, e eu fiz isso recentemente (há 6 meses) em outro servidor sem problemas
sMyles
@sMyles sim, foi removido e instalado, mas após a montagem do / var / lib / mysql em outro local, ou seja, uma mega partição diferente da que o / var foi montada anteriormente. Se houver um problema específico em nossos sistemas, seria ótimo descobrir isso. Essa foi uma nova instalação padrão do Centos 7 OS com RAID 10 com disco rígido de 8x, mas geralmente esses detalhes da matriz de disco são transparentes para o software.
Volksman
15
você teria que copiar os dados atuais para o novo diretório e alterar my.cnfseu MySQL.
Bem, é isso que eu não posso fazer. Quero alterar o diretório, mas quero criar novos bancos de dados no novo diretório. E deseja acessar o diretório antigo e os novos bancos de dados de diretório.
MySQL DBA
1
@MySQL DBA: se você usar algum ln -slince simbólico estático, não será?
RageZ
Bem, estou um pouco confuso com o uso deste comando. Como expliquei antes, quero criar novos bancos de dados em um novo diretório. É possível com o link simbólico.
MySQL DBA
1
você pode criar um novo diretório, use link simbólico para tornar o arquivo aparecer na nova dir e mudar suamy.cnf
O arquivo /etc/systemd/system/mysqld.service não está aqui. Alguma idéia de onde devo procurar?
Ron Piggott
1
Para aqueles que usam MariaDB o serviço de arquivo está localizado em /lib/systemd/system/[email protected]
Ron Piggott
5
Eu queria manter um banco de dados na minha máquina, mas também ter dados no disco rígido externo e alternar entre os dois.
Se você está em um Mac e instalou o MySQL usando o Homebrew, isso deve funcionar para você. Caso contrário, você só precisará substituir os locais apropriados para o MySQL datadirem sua máquina.
#cd to my data dir location
cd /usr/local/var/#copy contents of local data directory to the new location
cp -r mysql//Volumes/myhd/mydatadir/#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
Então, quando você quiser voltar, faça:
mv mysql mysql.remote
mv mysql.local mysql
e você está usando seu banco de dados local novamente. Espero que ajude.
isso não está exatamente abordando a questão como indicado - no entanto, era exatamente isso que eu estava procurando - e é uma maneira elegante de lidar com um caso / bug de ponta em que o my.cnf não lida bem com os espaços: bugs.mysql.com /bug.php?id=26033 . Vou vincular essa solução alternativa nesse relatório de bug.
Então mude o datadir no seu /etc/mysql/my.cnf
mysqld Start
Notas:
# 1: provavelmente você precisa ajustar as configurações do SELinux (experimente o SELinux desativado em caso de problemas), o Apparmor (Ubuntu) também pode ser um problema.
talvez isso não funcione para outra distribuição, mas se você estiver usando o ubuntu, isso funcionará bem para mim e eu mudarei o caminho para cada novo servidor ubuntu instalado para ativar o raid0.
Naddame 6/11
2
Sei que as pessoas estão votando contra isso, mas quero dizer que isso salvou meu dia. Obrigado!
Daniel Loureiro
3
Esta solução funciona no Windows 7 usando o Workbench. Você precisará de privilégios de administrador para fazer isso. Ele cria uma junção (como um atalho) para onde você realmente deseja armazenar seus dados
Abra o Workbench e selecione INSTANCE - Inicialização / Desligamento Pare o servidor
Navegue para C: \ ProgramData \ MySQL \ MySQL Server 5.6
Clique com o botão direito do mouse em Dados e selecione "Mover e depois vincular a pasta para ..." Aceite o aviso Aponte o destino para "Seu novo diretório de dados aqui sem as aspas" Clique em Mover e vincular
Agora vá para "Seu novo diretório de dados aqui sem as aspas"
Clique com o botão direito do mouse em Dados. Vá para a guia segurança. Clique em Editar. Clique em Adicionar. Serviço de Rede e depois em Verificar Nomes. Clique em OK. Clique na caixa de seleção Permitir Controle Total e em OK.
Volte para o Workbench e inicie o servidor
Este método funcionou para mim usando o MySQL Workbench 6.2 no Windows 7 Enterprise.
É melhor não mudar /etc/mysql/my.cnf
Em vez disso, você deseja criar um novo arquivo /etc/mysql/conf.d/ext.cnf(qualquer nome, mas a extensão deve ser cnf)
E coloque nela sua mudança:
[mysqld]
datadir=/vagrant/mq/mysql
Nesse caminho
Você não precisa alterar o arquivo existente (mais fácil para scripts de automação)
Sem problemas com a atualização da versão do MySQL (e suas configurações!).
Caso você seja um usuário do Windows e tenha chegado aqui para descobrir que todas as respostas são para usuários do Linux, não fique desapontado! Não vou deixar você perder tempo do jeito que eu fiz.
Um pouco de conversa fiada antes da solução:
O MySQL usa um diretório Data para armazenar os dados dos diferentes bancos de dados que você cria. Bem, no final, ele precisa armazená-los na forma de arquivos com alguns malabarismos adicionados no aplicativo e no formato de arquivo para garantir que o banco de dados prometa que você aprendeu nas classes de bancos de dados esteja intacto.
Agora você quer ter certeza de que há espaço suficiente para armazenar grandes bancos de dados que você pode criar no futuro, e então pensou: Ei! Quero colocá-lo em outra unidade que tenha mais espaço.
Então você faz o seguinte.
Etapa - 1 : Parando o serviço MySQL.
Window Key+ R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80isfor version 8.0, look for the one you've).
Stop it.(Right click, Stop)
Etapa 2 : Descobrindo o diretório de dados atual
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Por padrão, deve haver uma pasta aqui chamada Data , essa é a que é usada pelo MySQL na configuração padrão (desde que eles não tenham encontrado outro local melhor), mas vamos verificar isso.
Encontre o my.iniarquivo, deve estar ali.
Abra-o em um editor (talvez o Notepad ++).
Faça um CTRL + F para descobrir datadirno arquivo.
Tudo o que é mencionado aqui é a localização atual atualmente em uso pelo MySQL para o diretório de dados. É isso que você quer mudar.
Etapa 3 : Substituindo-o por um novo diretório de dados.
Digamos que você deseja que seu novo diretório de dados seja W: __ MySQL_Data. Vamos alterar o
datadirvalor no my.iniarquivo para esse valor. Mantenha o valor anterior comentado para que você não precise se lembrar dele.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Agora use xcopypara copiar o padrão datadirpara W:\. Iniciar prompt de comando (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0""W:\"/E /H /K /O /X
E renomeie a pasta copiada para o novo datadirvalor que você alterou. Aqui:W:/__MySQL_Data
Por que não simplesmente copiar? Bem, porque isso não é FRESCO !, isso ajuda você a não perder permissões na pasta copiada, para que, ao reiniciar MySQL80, não ocorra um erro estúpido: "O serviço MySQL80 no Computador Local foi iniciado e parou. Alguns serviços param automaticamente se eles não estão sendo usados por outros serviços ou programas ". - Cortesia: Microsoft
Etapa 4 : Reiniciando o serviço
Well, go back to the Services Manager toStart again,"MySQL80" that you stopped,to restart it again.
Obrigado por ter sido útil, mas aviso: my.ini não pode ser gravado por um usuário normal, a menos que você altere suas permissões. Ah, e ProgramData é uma pasta oculta, portanto você precisa alterar as configurações da pasta Explorer para vê-la.
JonP 05:00
1
Costumo fazer isso ao atualizar máquinas, movendo de uma caixa para outra. Além de mover / var / lib / mysql para um local melhor, muitas vezes preciso restaurar tabelas antigas do banco de dados a partir de uma instalação antiga do MySQL. Para fazer isso ...
Pare o mysql. Siga as instruções acima, se necessário.
Copie os diretórios do banco de dados - haverá um para cada banco de dados da instalação antiga - para o novo local do DATADIR. Mas omita os diretórios "mysql" e "performance_schema".
Permissões corretas entre os diretórios de banco de dados copiados. A propriedade deve ser mysql: mysql, diretórios devem ser 700 e arquivos devem ser 660.
Reinicie o mysql. Dependendo da sua instalação, os arquivos DB da versão antiga devem ser atualizados.
desculpe pelo voto negativo, esta solução pode estar correta, não tentei.
precisa saber é o seguinte
1
Tivemos que mover o MySQL para o /homediretório porque ele foi mapeado a partir de outro disco físico. Para simplificar ao vivo, em vez de alterar o diretório no my.cnf, mapeamos o novo diretório /home/mysqlno lugar do diretório original/var/lib/mysql . Funciona para nós como um encanto (testado no CentOS 7.1).
Crie o novo diretório e defina as permissões corretas.
Se você deseja fazer isso programaticamente (sem entrada manual de texto com o gedit), veja uma versão para um arquivo Docker com base na resposta do usuário1341296 acima:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm &&\
rm -rf /var/lib/mysql &&\
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g'/etc/mysql/my.cnf &&\/etc/init.d/mysql restart
No SuSE 13.1, isso funciona bem para mover o diretório de dados do mysql para outro lugar, por exemplo, para / home / example_user / e para fornecer um nome mais informativo:
Em / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
Para um dos ambientes, mudei o diretório de dados do mysql para um novo local, mas durante a reinicialização do servidor mysql, estava demorando. Então, verifiquei a porta e descobri que outro processo estava escutando na porta mysql. Então eu matei o processo e reiniciei o servidor mysql e funcionou bem.
Bem-vindo ao Stack Overflow! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Tim Diekmann
0
As etapas acima são básicas e básicas. Eu os segui e ainda recebi o erro "o mysql falhou ao iniciar".
Para que a nova pasta armazene dados mysql, você precisa ter certeza de que a pasta possui permissões e propriedade mysql: mysql.
Além disso, ele precisa verificar as permissões e a propriedade do diretório pai do mysql, se tiver, digamos, / data / mysql /. Aqui o diretório / data / deve ser root: root. Corrigi o erro de "mysql falha ao iniciar" após alterar a propriedade do diretório pai do / mysql. O SO na minha VM é RHEL 7.6.
Tentei o selinux no RHEL7.6 alterando SELINUX = reforçando para SELINUX = permissivo, não funcionou para mim.
usar o seguinte código
0
Também é possível fazer o link simbólico do datadir. Pelo menos no ambiente macOS, dev.
(homebrew) por exemplo
# make sure you're not overwriting anything important,backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory]/usr/local/var/mysql
Se você estiver usando o SE linux, configure-o para o modo permissivo editando / etc / selinux / config e alterando SELINUX = reforçando para SELINUX = permissivo
conforme detalhado aqui serverfault.com/questions/503887/... selinux não está em falta há algum outro problema que impede a mudança da datadirpropriedade
Respostas:
Pare o MySQL usando o seguinte comando:
Copie o diretório de dados existente (padrão localizado em
/var/lib/mysql
) usando o seguinte comando:edite o arquivo de configuração do MySQL com o seguinte comando:
Procure a entrada
datadir
e altere o caminho (que deveria ser/var/lib/mysql
) para o novo diretório de dados.No terminal, digite o comando:
Procure por linhas começando com
/var/lib/mysql
. Mudança/var/lib/mysql
nas linhas com o novo caminho.Salve e feche o arquivo.
Reinicie os perfis do AppArmor com o comando:
Reinicie o MySQL com o comando:
Agora entre no MySQL e você poderá acessar os mesmos bancos de dados que você tinha antes.
fonte
alias /var/lib/mysql/ -> /newpath/,
Rápido e fácil de fazer:
Edite o
/etc/my.cnf
arquivo e, em seguida,[mysqld]
adicione esta linha:Se você estiver usando o CageFS (com ou sem CloudLinux) e quiser alterar o diretório MySQL, DEVE adicionar o novo diretório a este arquivo:
E, em seguida, execute este comando:
fonte
você teria que copiar os dados atuais para o novo diretório e alterar
my.cnf
seu MySQL.Você precisa copiar o banco de dados quando o servidor não estiver em execução .
fonte
ln -s
lince simbólico estático, não será?my.cnf
Primeiro você deve parar o servidor mysql. por exemplo
Depois disso, você deve copiar o diretório de dados antigo (por exemplo, / var / lib / mysql) incl. privilégios para o seu novo diretório via
agora você pode alterar
/etc/mysql/my.cnf
os dados novos e reiniciar o servidorfonte
Se como eu, você está no debian e deseja mover o diretório mysql para sua casa ou um caminho em / home / ..., a solução é:
Um dia, para encontrar a solução para mim na documentação do mariadb. Espero que isso ajude alguns caras!
fonte
Eu queria manter um banco de dados na minha máquina, mas também ter dados no disco rígido externo e alternar entre os dois.
Se você está em um Mac e instalou o MySQL usando o Homebrew, isso deve funcionar para você. Caso contrário, você só precisará substituir os locais apropriados para o MySQL
datadir
em sua máquina.Então, quando você quiser voltar, faça:
e você está usando seu banco de dados local novamente. Espero que ajude.
fonte
Primeira parada do mysqld
Então mude o datadir no seu
/etc/mysql/my.cnf
mysqld Start
Notas:
# 1: provavelmente você precisa ajustar as configurações do SELinux (experimente o SELinux desativado em caso de problemas), o Apparmor (Ubuntu) também pode ser um problema.
# 2: consulte Referência de banco de dados de instalação do MySQL
fonte
Primeiro pare seu mysql
copie dados mysql para o novo local.
se você usar o apparmor, edite o seguinte arquivo e faça o seguinte
Substitua onde / var / lib / by / yourdirectory / adicione o seguinte, se não houver, ao arquivo
Salve o arquivo com o comando
Edite o arquivo my.cnf
Substitua onde / var / lib / by / yourdirectory / e salve com o comando
finalmente inicie o mysql
@ veja mais sobre raid0, otimização ici
fonte
Esta solução funciona no Windows 7 usando o Workbench. Você precisará de privilégios de administrador para fazer isso. Ele cria uma junção (como um atalho) para onde você realmente deseja armazenar seus dados
Abra o Workbench e selecione INSTANCE - Inicialização / Desligamento Pare o servidor
Instale o Junction Master em https://bitsum.com/junctionmaster.php
Navegue para C: \ ProgramData \ MySQL \ MySQL Server 5.6
Clique com o botão direito do mouse em Dados e selecione "Mover e depois vincular a pasta para ..." Aceite o aviso Aponte o destino para "Seu novo diretório de dados aqui sem as aspas" Clique em Mover e vincular
Agora vá para "Seu novo diretório de dados aqui sem as aspas"
Clique com o botão direito do mouse em Dados. Vá para a guia segurança. Clique em Editar. Clique em Adicionar. Serviço de Rede e depois em Verificar Nomes. Clique em OK. Clique na caixa de seleção Permitir Controle Total e em OK.
Volte para o Workbench e inicie o servidor
Este método funcionou para mim usando o MySQL Workbench 6.2 no Windows 7 Enterprise.
fonte
Tudo como @ user1341296 disse, mais ...
É melhor não mudar
/etc/mysql/my.cnf
Em vez disso, você deseja criar um novo arquivo/etc/mysql/conf.d/ext.cnf
(qualquer nome, mas a extensão deve sercnf
)E coloque nela sua mudança:
Nesse caminho
fonte
Caso você seja um usuário do Windows e tenha chegado aqui para descobrir que todas as respostas são para usuários do Linux, não fique desapontado! Não vou deixar você perder tempo do jeito que eu fiz.
Um pouco de conversa fiada antes da solução:
O MySQL usa um diretório Data para armazenar os dados dos diferentes bancos de dados que você cria. Bem, no final, ele precisa armazená-los na forma de arquivos com alguns malabarismos adicionados no aplicativo e no formato de arquivo para garantir que o banco de dados prometa que você aprendeu nas classes de bancos de dados esteja intacto.
Agora você quer ter certeza de que há espaço suficiente para armazenar grandes bancos de dados que você pode criar no futuro, e então pensou: Ei! Quero colocá-lo em outra unidade que tenha mais espaço.
Então você faz o seguinte.
Etapa - 1 : Parando o serviço MySQL.
Etapa 2 : Descobrindo o diretório de dados atual
Por padrão, deve haver uma pasta aqui chamada
Data
, essa é a que é usada pelo MySQL na configuração padrão (desde que eles não tenham encontrado outro local melhor), mas vamos verificar isso.Encontre o
my.ini
arquivo, deve estar ali.Abra-o em um editor (talvez o Notepad ++).
Faça um CTRL + F para descobrir
datadir
no arquivo.Tudo o que é mencionado aqui é a localização atual atualmente em uso pelo MySQL para o diretório de dados. É isso que você quer mudar.
Etapa 3 : Substituindo-o por um novo diretório de dados.
Digamos que você deseja que seu novo diretório de dados seja W: __ MySQL_Data. Vamos alterar o
datadir
valor nomy.ini
arquivo para esse valor. Mantenha o valor anterior comentado para que você não precise se lembrar dele.Agora use
xcopy
para copiar o padrãodatadir
paraW:\
. Iniciar prompt de comando (Window + R, cmd, Enter)E renomeie a pasta copiada para o novo
datadir
valor que você alterou. Aqui:W:/__MySQL_Data
Por que não simplesmente copiar? Bem, porque isso não é FRESCO !, isso ajuda você a não perder permissões na pasta copiada, para que, ao reiniciar
MySQL80
, não ocorra um erro estúpido: "O serviço MySQL80 no Computador Local foi iniciado e parou. Alguns serviços param automaticamente se eles não estão sendo usados por outros serviços ou programas ". - Cortesia: MicrosoftEtapa 4 : Reiniciando o serviço
Etapa 5 : Feito! Agora, volte ao trabalho !!
fonte
Costumo fazer isso ao atualizar máquinas, movendo de uma caixa para outra. Além de mover / var / lib / mysql para um local melhor, muitas vezes preciso restaurar tabelas antigas do banco de dados a partir de uma instalação antiga do MySQL. Para fazer isso ...
fonte
Tivemos que mover o MySQL para o
/home
diretório porque ele foi mapeado a partir de outro disco físico. Para simplificar ao vivo, em vez de alterar o diretório no my.cnf, mapeamos o novo diretório/home/mysql
no lugar do diretório original/var/lib/mysql
. Funciona para nós como um encanto (testado no CentOS 7.1).Crie o novo diretório e defina as permissões corretas.
Pare o MySQL se estiver executando.
Mova o diretório de dados.
Crie uma montagem permanente e execute-a.
Reinicie o servidor.
fonte
Se você deseja fazer isso programaticamente (sem entrada manual de texto com o gedit), veja uma versão para um arquivo Docker com base na resposta do usuário1341296 acima:
Disponível no hub Docker aqui: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
fonte
Primeiro, você deve saber onde está o seu arquivo de configuração? onde está o seu arquivo de configuração?
SE você instalou com o apt-get ou yum install。
arquivo de configuração pode aparecer em
arquivo de dados pode aparecer em
e o que você deve fazer é
e depois trabalhos concluídos.
Mas se você não o instalou com o apt ou yum, o diretório pode não ser assim, e você pode encontrar os arquivos mysql com
fonte
No SuSE 13.1, isso funciona bem para mover o diretório de dados do mysql para outro lugar, por exemplo, para / home / example_user / e para fornecer um nome mais informativo:
Em / var / lib /:
Eu reiniciei o mysql:
mas suspeite que mesmo isso não fosse necessário.
fonte
Para um dos ambientes, mudei o diretório de dados do mysql para um novo local, mas durante a reinicialização do servidor mysql, estava demorando. Então, verifiquei a porta e descobri que outro processo estava escutando na porta mysql. Então eu matei o processo e reiniciei o servidor mysql e funcionou bem.
Segui as etapas abaixo para alterar o diretório de dados, que funcionou excelente. alterar diretório de dados mysql no Linux
fonte
As etapas acima são básicas e básicas. Eu os segui e ainda recebi o erro "o mysql falhou ao iniciar".
Para que a nova pasta armazene dados mysql, você precisa ter certeza de que a pasta possui permissões e propriedade mysql: mysql.
Além disso, ele precisa verificar as permissões e a propriedade do diretório pai do mysql, se tiver, digamos, / data / mysql /. Aqui o diretório / data / deve ser root: root. Corrigi o erro de "mysql falha ao iniciar" após alterar a propriedade do diretório pai do / mysql. O SO na minha VM é RHEL 7.6.
fonte
Também é possível fazer o link simbólico do datadir. Pelo menos no ambiente macOS, dev.
(homebrew) por exemplo
Reinicie o mysql.
fonte
Se você estiver usando o SE linux, configure-o para o modo permissivo editando / etc / selinux / config e alterando SELINUX = reforçando para SELINUX = permissivo
fonte
datadir
propriedade