Locais diferentes para bancos de dados MySQL?

18

Posso configurar o MySQL para armazenar um banco de dados específico em um local separado no disco?

Eu ainda quero que todos os novos bancos de dados cheguem ao local padrão, mas há um banco de dados específico que eu gostaria de ter armazenado na minha pasta do Dropbox para que ele possa ficar sincronizado entre alguns computadores.

Como posso fazer isso?

Colin
fonte
11
Aliás, é possível fazer o contrário. Deixe o banco de dados como estava e faça o link simbólico para ele no Dropbox. O Dropbox realmente não entende os links simbólicos e os sincroniza normalmente.
Trig

Respostas:

27

Claro que você pode! Você precisa conceder permissão de root . Leia as ln páginas de manual.

O MySQL armazena os dados do banco de dados em diretórios separados /var/lib/mysql. Eu acho que, no começo, você tinha que fazer um dir, onde deseja colocar os arquivos do banco de dados selecionado. Conceda permissão de root, pare o MySQL deamon:

# /etc/init.d/mysql stop

Copie seus dados para sua nova pasta:

# cp /var/lib/mysql/DATABASENAME /path/to/new/database/dir

Remova o diretório antigo dos arquivos de dados do MySQL: ( Aviso! SEMPRE faça o SQL despejar primeiro !!! )

# rm -R /var/lib/mysql/DATABASENAME

Faça um link simbólico de volta ao diretório de dados do MySQL: ( Preste atenção! Leia a página de manual do ln primeiro !!! )

# ln -s /full/path/to/new/database/dir /var/lib/mysql/DATABASENAME

Depois disso, você está pronto, inicie o seu MySQL:

# /etc/init.d/mysql start

Atenção! Se o seu novo diretório não for gravável e legível pelo MySQL, isso não funcionaria! Exemplo, o problema comum: você coloca seu novo diretório de dados na sua pasta pessoal, sua pasta pessoal é protegida contra leitura por outras pessoas (por exemplo: drwxrwx --- você é seu).

Pergunte, se você quiser saber outras coisas sobre esse método!

antivirtel
fonte
2
Obrigado! Eu nem sequer considerei links simbólicos, estava muito ocupado pensando em maneiras de fazê-lo dentro do mysql.
Colin
8
Você desejará editar /etc/apparmor.d/*mysqldpara incluir o novo diretório também. Então sudo service apparmor reloadantes de reiniciar o MySQL.
Kees Cozinhe
3
@KeesCook muito obrigado pela dica do apparmor, isso estava me deixando louco !! Parece que é melhor para colocá-lo em /etc/apparmor.d/localque (no meu instalação já existe um usr.sbin.mysqld lá), adicionando uma única /full/path/to/new/database/dir/** rwk,fez isso por mim ...
Tobias J
Muito obrigado, alguns detalhes da edição do apparmor aqui também são úteis. Fiquei lento ao tentar colocar o banco de dados em uma unidade que não era montada automaticamente na inicialização e precisava do usuário root para acessá-lo. Recusou-se a trabalhar. Editado fstabcomo este para que essa unidade foi montado no sistema de arquivos após a inicialização, agora tudo funciona.
cardamomo
3

Lembre-se de que, se você estiver usando o Ubuntu, também precisará adicionar uma entrada no arquivo de configuração do AppArmour /etc/apparmor.d/usr.sbin.mysqld, caso contrário, você continuará recebendo erros de permissão de gravação, mesmo que altere arquivos e pastas permissões.

Andrea Moro
fonte