it-swarm.dev

Jak mohu přesunout datový adresář MySQL?

Snažím se přesunout datový adresář své databáze MySQL do druhého diskového pole, které mám jako bod připojení /array2/.

Problém, který mám, je, že jsem vyzkoušel vše a poté, co upravím umístění datadiru v my.cnf mysql, se znovu nespustí.

Vše, co dostanu, je:

start: Job failed to start
58
Jonny Flowers

Zapomněl jsem na zbroj.

Pro každého, kdo má zájem, jsem udělal následující pro přesun složky.

Zastavte server mysql:

stop mysql

Vytvořte nový adresář:

mkdir /array2/mysql

Zkopírujte POUZE databázové složky:

cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql

Zálohujte my.cnf file:

cp /etc/mysql/my.cnf /root/my.cnf.backup

Upravit my.cnf file:

nano /etc/mysql/my.cnf

Změňte všechny zmínky o starém datadiru a soketu do nového umístění

Důl se stal:

datadir=/array2/mysql
socket=/array2/mysql/mysql.sock

Aktualizujte oprávnění adresáře:

chown -R mysql:mysql /array2/mysql

Přejmenujte starý adresář:

mv /var/lib/mysql /var/lib/mysql-old

Vytvořte symbolický odkaz, jen v případě, že:

ln -s /array2/mysql /var/lib/mysql 

Dejte vědět AppArmor o novém datadiru:

echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias

Znovu načtěte profily vyznavačů

Sudo /etc/init.d/apparmor reload

Pak začněte mysql:

start mysql
63
Jonny Flowers

Zjistil jsem, že AppArmor byl viníkem zkoumání syslog, a byl schopen úspěšně změnit umístění dat mysql sledováním tohoto procesu.

Mějte na paměti, že v souborech upravených níže řádky začínající + byly přidány a řádky začínající na - byly odstraněny. Neměli byste vlastně psát/vkládat + při přidání řádků k těmto souborům.

Klonoval jsem adresář mysql do nového umístění:

Sudo rsync -av /var/lib/mysql /new_dir

Poté jsem upravil řádek datadir v /etc/mysql/my.cnf:

Sudo vi /etc/mysql/my.cnf
-datadir     = /var/lib/mysql
+datadir     = /new_dir/mysql

Pak jsem upravil /etc/apparmor.d/usr.sbin.mysqld:

Sudo vi /etc/apparmor.d/usr.sbin.mysqld
-  /var/lib/mysql/ r,
-  /var/lib/mysql/** rwk,
+  /new_dir/mysql/ r,
+  /new_dir/mysql/** rwk,

Poté jsem restartoval mysql.

23
Brian Moore

Buďte si vědomi.

Pokud máte tabulky InnoDB, MUSÍTE kopírovat přes ibdata* a ib_logfile* soubory nebo nebudete moci tabulky používat. Dostanes:

'Table' databaseName.tableName 'neexistuje'

chyby.

Spusťte tento příkaz kopírování a zkopírujte přes ibdata* a ib_logfile* soubory.

Sudo cp -p /var/lib/mysql/ib* /array2/mysql/
13
dave

Jen jsem se pokusil jiným způsobem, že někteří mohou najít užitečné:

kopie s neporušenými oprávněními:

rsync -avzh /var/lib/mysql /path/to/new/place

zálohovat (v případě, že se něco pokazí):

mv /var/lib/mysql /var/lib/_mysql

vytvořte nový prázdný adresář namísto starých:

mkdir /var/lib/mysql

svázat připojit nové umístění ke starému:

mount -B /path/to/new/place /var/lib/mysql

Doufám, že někomu pomůže, protože symlinking pro mě nefungoval, a to byl nejjednodušší způsob

5
snapfractalpop

Raději používám volbu mount with bind, takže se vyhnu jakýmkoli dalším změnám v konfiguraci Apparmor a Mysql.


Například:

Předpokládejme, že chci všechno přesunout v /var/www. Řekněme, že tento režisér je mé prostředí dev a že je připojen do jiné oblasti

  1. Nejprve musíme zastavit mysql:

    Sudo systemctl stop mysql.service
    
  2. Přesunujeme soubory (zachování oprávnění)

    Sudo rsync -av /var/lib/mysql /var/www
    

    Tím se vytvoří adresář /var/www/mysql/ s veškerým obsahem.

  3. Odstraňujeme vše ze starého adresáře:

    Sudo rm -r /var/lib/mysql/*
    
  4. Připojíme nový adresář s volbou bind ve starém adresáři.
    Upravit /etc/fstab a přidejte tento řádek:

    /var/www/mysql /var/lib/mysql  none  bind 0 0
    

    Tím se připojí /var/www/mysql v našem prázdném adresáři /var/lib/mysql
    Možnost bind zde dělá kouzlo, naplní /var/lib/mysql s obsahem /var/www/mysql takže pro mysql a apparmor to bude, jako by se nic nezměnilo.

  5. Nyní provedeme připojení:

    Sudo mount -a
    

    a restartujte mysql.

4
Postadelmaga

Pokud přesunete datadir, budete muset nejen dát nová oprávnění k datadiru, ale musíte pojistit všechny nadřazené adresáře, které mají oprávnění.

Přesunul jsem datadir na pevný disk připojený v Ubuntu jako:

/media/*user*/Data/

a můj datadir byl Databáze.

Musel jsem nastavit oprávnění na 771 pro každé médium, živatel a datové adresáře:

Sudo chmod 771 *DIR*

Pokud to nefunguje, dalším způsobem, jak můžete mysql dostat, je změnit uživatele v /etc/mysql/my.cnf na root; ačkoliv s tím nejsou pochybnosti z hlediska bezpečnosti.

3
Kohjah Breese

Uvědomujete si, že pokud přijmete odpovědi doslovně z přijaté odpovědi, selže?

cp -R/var/lib/mysql/array2/mysql

Zkopíruje/var/lib/mysql do/array2/mysql/mysql.

Když nastavíte konfigurační soubor, raději byste do adresáře vložili/array2/mysql/mysql, jinak se váš mysqld nespustí.

Lepší příkazy pro kopírování by byly:

cp -R/var/lib/mysql/array2/cp -R/var/lib/mysql/users/array2/mysql

Jen moje 2 centy stojí za to.

0
Ellison Chan