É possível alterar meu diretório de dados padrão do MySQL para outro caminho? Poderei acessar os bancos de dados a partir do local antigo?
É possível alterar meu diretório de dados padrão do MySQL para outro caminho? Poderei acessar os bancos de dados a partir do local antigo?
Respostas:
Pare o MySQL usando o seguinte comando:
sudo /etc/init.d/mysql stop
Copie o diretório de dados existente (padrão localizado em /var/lib/mysql
) usando o seguinte comando:
sudo cp -R -p /var/lib/mysql /newpath
edite o arquivo de configuração do MySQL com o seguinte comando:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
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:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
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:
sudo /etc/init.d/apparmor reload
Reinicie o MySQL com o comando:
sudo /etc/init.d/mysql restart
Agora entre no MySQL e você poderá acessar os mesmos bancos de dados que você tinha antes.
alias /var/lib/mysql/ -> /newpath/,
Rápido e fácil de fazer:
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Edite o /etc/my.cnf
arquivo 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:
/etc/cagefs/cagefs.mp
E, em seguida, execute este comando:
cagefsctl --remount-all
você teria que copiar os dados atuais para o novo diretório e alterar my.cnf
seu MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Você precisa copiar o banco de dados quando o servidor não estiver em execução .
ln -s
lince simbólico estático, não será?
my.cnf
Primeiro você deve parar o servidor mysql. por exemplo
# /etc/init.d/mysql stop
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
# cp -R -p /var/lib/mysql /new/data/dir
agora você pode alterar /etc/mysql/my.cnf
os dados novos e reiniciar o servidor
# /etc/init.d/mysql restart
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!
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.
#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.
Primeira parada do mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
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
Primeiro pare seu mysql
sudo service mysql stop
copie dados mysql para o novo local.
sudo cp -rp /var/lib/mysql /yourdirectory/
se você usar o apparmor, edite o seguinte arquivo e faça o seguinte
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Substitua onde / var / lib / by / yourdirectory / adicione o seguinte, se não houver, ao arquivo
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Salve o arquivo com o comando
:wq
Edite o arquivo my.cnf
sudo vim /etc/mysql/my.cnf
Substitua onde / var / lib / by / yourdirectory / e salve com o comando
:wq
finalmente inicie o mysql
sudo service mysql start
@ veja mais sobre raid0, otimização ici
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.
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 ser cnf
)
E coloque nela sua mudança:
[mysqld]
datadir=/vagrant/mq/mysql
Nesse caminho
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 (80 is for 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.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 no my.ini
arquivo 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 xcopy
para copiar o padrão datadir
para 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 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: Microsoft
Etapa 4 : Reiniciando o serviço
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Etapa 5 : Feito! Agora, volte ao trabalho !!
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 ...
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.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Pare o MySQL se estiver executando.
systemctl stop mysql
Mova o diretório de dados.
mv -f /var/lib/mysql/* /home/mysql
Crie uma montagem permanente e execute-a.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Reinicie o servidor.
systemctl start mysql
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
Disponível no hub Docker aqui: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
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
/etc/mysql/my.cnf
arquivo de dados pode aparecer em
/ var / lib / mysql
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
whereis mysql
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
Eu reiniciei o mysql:
# systemctl restart mysql.service
mas suspeite que mesmo isso não fosse necessário.
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
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.
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
Reinicie o 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
datadir
propriedade