Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/04/2010, à 10:37

hannibal.76

[Résolu] deplacer l'emplacement par default des base de MYSQL

Bonjour a tous

J'ai une petit question:
Comment faire pour deplacé le repertoire qui contient les base de donnée MySql?

car, pour l'instant ils sont dans mon /var/lib/mysql mais moi je voudrai que mes bases soit dans /home/mysql

j'ai essayé de faire un lien avec ln mais cela ne fonctionne pas....

ln -s /home/mysql /var/lib/mysql

Quelqu'un sait 'il comment faire ceci ?

Merci d'avance pour votre aide wink

Dernière modification par hannibal.76 (Le 15/04/2010, à 16:36)

Hors ligne

#2 Le 15/04/2010, à 10:59

spectre3brad

Re : [Résolu] deplacer l'emplacement par default des base de MYSQL

Utilise tu un outil du genre Webmin? Car personnellement je l'utilise et il y a une option si je me souviens bien pour deplacer l'emplacement. En ligne de commande par contre je pense que l'on peut le faire dans le .conf de Mysql. Sinon pourquoi cette volonté de déplacer les bases de données?

Hors ligne

#3 Le 15/04/2010, à 13:25

francoisp31

Re : [Résolu] deplacer l'emplacement par default des base de MYSQL

oui tout à fait

tu peux déplacer le répertoire des fichiers de mysql .

tu stop juste la réplication si il y en a une sur le master et le slave si ta machine est le master, et que sur le slave si ta machine est le slave.

si tu n'as pas de réplication, tu fais juste un arrêt de mysql dans cet ordre
blocage du transactionnel
copie full (rsync par exemple)
arret de la base
remplacement de /var/lib/mysql par le lien vers le nouvel emplacement
bien vérifier le propriétaire des fichiers
ouvrir la base

et en cas de réplication la redémarrer.

c'est exactement mon cas :

lrwxrwxrwx 1 mysql         root            16 fév  5 20:56 mysql -> /home/mysql/lib/

undertaker:/home/francois# ls -lrth /home/mysql/lib/
total 1,4G
-rw------- 1 mysql mysql    7 nov 17 20:53 mysql_upgrade_info
-rw-rw---- 1 mysql mysql 2,3M jan 28 20:10 mysqld-bin.000001
-rw-rw---- 1 mysql mysql  117 jan 28 20:32 mysqld-bin.000002
-rw-rw---- 1 mysql mysql 2,2M jan 28 21:02 mysqld-bin.000003
-rw-rw---- 1 mysql mysql  117 jan 28 21:03 mysqld-bin.000004
-rw-rw---- 1 mysql mysql  100 jan 28 21:03 mysqld-bin.index
-rw-rw---- 1 mysql mysql  117 jan 28 21:20 mysqld-bin.000005
drwx------ 2 mysql mysql 4,0K fév  2 21:15 fengoffice
drwx------ 2 mysql mysql 4,0K fév 11 13:12 velo
-rw-r--r-- 1 mysql mysql    0 fév 16 08:53 debian-5.0.flag
drwxr-xr-x 2 mysql mysql 4,0K fév 16 08:53 mysql
drwx------ 2 mysql mysql 4,0K fév 17 20:36 toto
drwx------ 2 mysql mysql 4,0K fév 18 21:19 centstorage
drwx------ 2 mysql mysql 4,0K fév 18 21:19 centreon
drwx------ 2 mysql mysql 4,0K fév 18 21:19 centstatus
-rw-rw---- 1 mysql mysql 5,0M fév 18 21:43 ib_logfile1
drwx------ 2 mysql mysql 4,0K fév 18 22:27 ndoutils
drwx------ 2 mysql mysql 4,0K fév 18 22:47 cacti
drwx------ 2 mysql mysql 4,0K fév 22 16:33 postfix
drwx------ 2 mysql mysql  12K mar 15 08:59 ndo
drwx------ 2 mysql mysql 4,0K mar 15 18:10 test_2
-rw-rw---- 1 mysql mysql 101M avr  6 05:45 mysql-bin.000170
-rw-rw---- 1 mysql mysql 8,8M avr  6 07:39 mysql-bin.000171
drwx------ 2 mysql mysql 4,0K avr  6 12:19 compendium
drwx------ 2 mysql mysql 4,0K avr  6 12:20 plan_migration2_1270549207283
-rw-rw---- 1 mysql mysql 101M avr  7 05:32 mysql-bin.000172
-rw-rw---- 1 mysql mysql 9,8M avr  7 07:41 mysql-bin.000173
-rw-rw---- 1 mysql mysql 101M avr  8 05:37 mysql-bin.000174
[...]

et comme tu vois ça marche depuis pas mal de temps, 2 mois, et la réplication se fait tjrs comme avant.


sudo mkdir /home/mysql
sudo chown mysql:mysql /home/mysql

Enfin, dernier détail à connaître : l’emplacement de vos données MySQL :

    * sous Linux, généralement : /var/lib/mysql

   1. stopper le service MySQL
   2. déplacer le répertoire de données (au cas où)
   3. créer le lien symbolique
   4. copier les données dans le nouvel emplacement
   5. relancer le service MySQL

Concrètement, ça se traduit comme ceci :
au minimum donc comme procédure celle ci :

tar zcf /home/file_mysql.tar.gz /var/lib/mysql/
mysqldump -u root -p --all-databases | gzip > /home/dump.full.$(date +%Y%m%d)
mkdir -P /home/mysql/lib
rsync -zauv /var/lib/mysql /home/mysql/lib
/etc/init.d/mysql stop
rm -rf /var/lib/mysql
ln -s /home/mysql/lib  /var/lib/mysql
/etc/init.d/mysql start

en cas de réplication ou applicatifs qui utilisent la base il faut en plus stopper le transactionnel et/ou la réplication avant de faire la copie de fichier. c'est à peu près la seule restriction .

et bien sur 2 sauvegardes différentes une au niveau des fichiers et  un export dump full histoire de faire ceinture+bretelles pour un éventuel retour-arrière.


une solution plus élégante encore  :

tar zcf /home/file_mysql.tar.gz /var/lib/mysql/
mysqldump -u root -p --all-databases | gzip > /home/dump.full.$(date +%Y%m%d)
mkdir -P /home/mysql/lib
rsync -zauv /var/lib/mysql /home/mysql/lib
vi /etc/mysql/my.cnf
/etc/init.d/mysql restart

et si tout va bien au bout de 24H par exemple :

sudo rm -rf /var/lib/mysql # rha lovely j'aime faire des rm et ecrire des conneries sur les lignes de commandes critiques 
!

dans ce cas il suffit de modifier donc le my.cnf tel que :

datadir         = /var/lib/mysql

devient

datadir         = /home/lib/mysql

Dernière modification par francoisp31 (Le 15/04/2010, à 13:29)


Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.

Hors ligne

#4 Le 15/04/2010, à 16:06

hannibal.76

Re : [Résolu] deplacer l'emplacement par default des base de MYSQL

merci pour ton aide,
mais en regardant ici
http://doc.ubuntu-fr.org/utilisateurs/mcpeter/mysql_astuces

j'ai vue que je dois modifié ce fichier
/etc/apparmor.d/usr.sbin.mysqld

Ceci est t'il vraiment utile ?

Mon probleme est que tout ceci doit ce retrouvé dans un script (script qui une fois terminé devra installé un serveur et toutes les appli qui vont avec ). Donc, je ne peux pas utilisé nano , vi ou autre....
Tout doit etre fait en shell, awk....

voila voila
merci de ton aide

EDIT:
Sa ne fonctionne pas.....
mon MYSQL ne veut plus demarré....

voici mon my.cnf

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
#
# * Basic Settings
#

#
# * IMPORTANT
#   If you make changes to these settings and your system uses apparmor, you may
#   also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.
#

user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /home/mysql
tmpdir		= /tmp
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address		= 127.0.0.1
#
# * Fine Tuning
#
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit	= 1M
query_cache_size        = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# Here you can see queries with especially long duration
#log_slow_queries	= /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id		= 1
#log_bin			= /var/log/mysql/mysql-bin.log
expire_logs_days	= 10
max_binlog_size         = 100M
#binlog_do_db		= include_database_name
#binlog_ignore_db	= include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem



[mysqldump]
quick
quote-names
max_allowed_packet	= 16M

[mysql]
#no-auto-rehash	# faster start of mysql but no tab completition

[isamchk]
key_buffer		= 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

mon usr.sbin.mysqld

# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/mysql>
  #include <abstractions/winbind>

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/my.cnf r,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /home/mysql/ r,
  /home/mysql/** rwk 
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid w,
  /var/run/mysqld/mysqld.sock w,
}

et voici les actions que j'ai fait:

mkdir /home/mysql
chown mysql:mysql /home/mysql
/etc/init.d/mysql stop
cp -r /var/lib/mysql/mysql /home/mysql
mv ./my.cnf  /etc/mysql
mv ./usr.sbin.mysqld /etc/apparmor.d/usr.sbin.mysqld
ln -s /home/mysql/lib /var/lib/mysql
reboot

aprés reboot, le serveur mysql n'est pas lancé donc je fait

/etc/init.d/mysql start

et la j'ai ceci

 /etc/init.d/mysql start
 * Starting MySQL database server mysqld                       [fail]

mes log
/var/log/mysql.err et /var/log/mysql.log sont vide
Donc je ne sais pas d'ou viens l'erreur....

Voila donc si vous avez une idée sur le probleme...

je vous remercie d'avance wink

EDIT 2:
j'ai réussi en faisant comme ceci

/etc/init.d/mysql stop
mv /var/lib/mysql /home/mysql
ln -s /home/mysql /var/lib/mysql
mv ./usr.sbin.mysqld /etc/apparmor.d/usr.sbin.mysqld

Merci a vous pour votre aide wink

Dernière modification par hannibal.76 (Le 15/04/2010, à 16:35)

Hors ligne

#5 Le 15/04/2010, à 18:06

francoisp31

Re : [Résolu] deplacer l'emplacement par default des base de MYSQL

tongue bon tu as trouvé c'est le principal


Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.

Hors ligne

#6 Le 16/04/2010, à 09:35

hannibal.76

Re : [Résolu] deplacer l'emplacement par default des base de MYSQL

Oui, mais ton aide ma été trés utile pour me guidé wink
je t'en remercie wink

Hors ligne

#7 Le 25/05/2013, à 12:11

jmax

Re : [Résolu] deplacer l'emplacement par default des base de MYSQL

Attention au fichier /etc/apparmor.d/usr.sbin.mysqld qui liste les répertoires autorisés. Il faut aller changer /var/lib/mysql par le chemin du nouveau répertoire

Hors ligne