Maison > Article > base de données > Deux façons d'ajouter des bases de données esclaves sans arrêter le service MySQL
L'environnement de production actuelBase de données MySQL a un maître et un esclave À mesure que le volume d'activité continue d'augmenter, une base de données esclave est ajoutée. Le principe est que cela ne peut pas affecter l'utilisation commerciale en ligne, ce qui signifie que le service MySQL ne peut pas être redémarré. Afin d'éviter d'autres situations, choisissez de fonctionner pendant la faible période de pointe du trafic du site Web.
Généralement, il existe deux façons d'ajouter une base de données esclave en ligne. La première consiste à sauvegarder la base de données principale via mysqldump et à la restaurer sur la base de données esclave. la quantité de données est importante, la vitesse de sauvegarde sera très rapide si elle est lente, le verrouillage de la table prendra beaucoup de temps. L'autre consiste à sauvegarder la base de données principale via l'outil xtrabackup et à la restaurer dans la base de données esclave. xtrabackup est une sauvegarde physique, qui a une vitesse de sauvegarde rapide et ne verrouille pas les tables. Pourquoi ne pas verrouiller la table ? Parce qu'il surveillera le journal de la base de données principale, s'il y a des données mises à jour , elles seront d'abord écrites dans un fichier, puis renvoyées dans le fichier de sauvegarde pour maintenir la cohérence des données.
Informations sur le serveur :
Base de données principale : 192.168.18.212 (original)
Base de données esclave 1 : 192.168.18.213 (original)
Base de données esclave 2 : 192.168.18.214 (Nouveau )
Version de la base de données : MySQL5.5
Moteur de stockage : Innodb
Nom de la bibliothèque de test : weibo
Le maître-esclave MySQL est basé sur le journal binlog, donc binlog doit être activé après l'installation de la base de données. L'avantage est que d'une part, vous pouvez utiliser binlog pour restaurer la base de données, et d'autre part, vous pouvez préparer le maître et l'esclave.
Les paramètres de configuration d'origine de la base de données principale sont les suivants :
# vi my.cnf server-id = 1 #id要唯一 log-bin = mysql-bin #开启binlog日志 auto-increment-increment = 1 #在Ubuntu系统中MySQL5.5以后已经默认是1 auto-increment-offset = 1 slave-skip-errors = all #跳过主从复制出现的错误
1 Créez un compte de synchronisation pour la base de données principale
mysql> grant all on *.* to 'sync'@'192.168.18.%' identified by 'sync';
. 2. Configurez MySQL à partir de la base de données
# vi my.cnf server-id = 3 #这个设置3 log-bin = mysql-bin #开启binlog日志 auto-increment-increment = 1 #这两个参数在Ubuntu系统中MySQL5.5以后都已经默认是1 auto-increment-offset = 1 slave-skip-errors = all #跳过主从复制出现的错误
3. Sauvegardez la base de données principale
# mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql
Description du paramètre :
–routines : exporter procédures stockées et fonctions
– single_transaction : définir l'état d'isolement de la transaction lorsque l'exportation démarre et démarre avec une transaction d'instantané cohérente, puis déverrouiller les tables ; lock-tables verrouille une table et ne peut pas écrire d'opérations tant que le vidage n'est pas terminé.
–master-data : La valeur par défaut est égale à 1, et le point de départ du vidage (changer le maître en) le point binlog et la valeur pos sont écrits dans le résultat lorsqu'ils sont égaux à 2, le maître de modification est écrit dans le résultat et annoté.
4. Copiez la bibliothèque de sauvegarde dans la bibliothèque esclave
# scp weibo.sql [email protected]:/home/root
5. Créez la table test_tb dans la bibliothèque principale. pour simuler la base de données Pour ajouter de nouvelles données, weibo.sql n'existe pas
mysql> create table test_tb(id int,name varchar(30));
6 Importez la base de données de sauvegarde depuis la base de données
# mysql -uroot -p123 -e 'create database weibo;' # mysql -uroot -p123 weibo < weibo.sql
7. Dans Sauvegardez le fichier weibo.sql et vérifiez les valeurs binlog et pos
# head -25 weibo.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; #大概22行
8. Synchronisez les paramètres de la bibliothèque esclave à partir de ce point de journal et start
mysql> change master to master_host='192.168.18.212', -> master_user='sync', -> master_password='sync', -> master_log_file='mysql-bin.000001', -> master_log_pos=107; mysql> start slave;
mysql> show slave status\G; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 90 Current database: *** NONE *** *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.18.212 Master_User: sync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 358 Relay_Log_File: mysqld-relay-bin.000003 Relay_Log_Pos: 504 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ......Vous pouvez voir que les threads IO et SQL sont OUI, indiquant que la configuration maître-esclave est réussie.
9. Consultez les tableaux de la bibliothèque Weibo depuis la bibliothèque
mysql> show tables; +---------------------------+ | Tables_in_weibo | +---------------------------+ | test_tb |
发现刚才模拟创建的test_tb表已经同步过来!
在上面配置基础上做实验,先删除掉从库配置:
mysql> stop slave; #停止同步 mysql> reset slave; #清除从连接信息 mysql> show slave status\G; #再查看从状态,可以看到IO和SQL线程都为NO mysql> drop database weibo; #删除weibo库
此时,从库现在和新装的一样,继续前进!
1. 主库使用xtrabackup备份
# innobackupex --user=root --password=123 ./
生成一个以时间为命名的备份目录:2015-07-01_16-49-43
# ll 2015-07-01_16-49-43/ total 18480 drwxr-xr-x 5 root root 4096 Jul 1 16:49 ./ drwx------ 4 root root 4096 Jul 1 16:49 ../ -rw-r--r-- 1 root root 188 Jul 1 16:49 backup-my.cnf -rw-r----- 1 root root 18874368 Jul 1 16:49 ibdata1 drwxr-xr-x 2 root root 4096 Jul 1 16:49 mysql/ drwxr-xr-x 2 root root 4096 Jul 1 16:49 performance_schema/ drwxr-xr-x 2 root root 12288 Jul 1 16:49 weibo/ -rw-r--r-- 1 root root 21 Jul 1 16:49 xtrabackup_binlog_info -rw-r----- 1 root root 89 Jul 1 16:49 xtrabackup_checkpoints -rw-r--r-- 1 root root 563 Jul 1 16:49 xtrabackup_info -rw-r----- 1 root root 2560 Jul 1 16:49 xtrabackup_logfile
2. 把备份目录拷贝到从库上
# scp -r 2015-07-01_16-49-43 [email protected]:/home/root
3. 从库上把MySQL服务停掉,删除datadir目录,将备份目录重命名为datadir目录
# sudo rm -rf /var/lib/mysql/ # sudo mv 2015-07-01_16-49-43/ /var/lib/mysql # sudo chown mysql.mysql -R /var/lib/mysql # sudo /etc/init.d/mysql start # ps -ef |grep mysql #查看已经正常启动 mysql 8832 1 0 16:55 ? 00:00:00 /usr/sbin/mysqld
4. 在主库创建test_tb2表,模拟数据库新增数据
mysql> create table test_tb2(id int,name varchar(30));
5. 从备份目录中xtrabackup_info文件获取到binlog和pos位置
# cat /var/lib/mysql/xtrabackup_info uuid = 201af9db-1fce-11e5-96b0-525400e4239d name = tool_name = innobackupex tool_command = --user=root --password=... ./ tool_version = 1.5.1-xtrabackup ibbackup_version = xtrabackup version 2.2.11 based on MySQL server 5.6.24 Linux (x86_64) (revision id: ) server_version = 5.5.43-0ubuntu0.12.04.1-log start_time = 2015-07-01 16:49:43 end_time = 2015-07-01 16:49:46 lock_time = 1 binlog_pos = filename 'mysql-bin.000001', position 429 #这个位置 innodb_from_lsn = 0 innodb_to_lsn = 1598188 partial = N incremental = N format = file compact = N compressed = N
6. 从库设置从这个日志点同步,并启动
mysql> change master to master_host='192.168.18.212', -> master_user='sync', -> master_password='sync', -> master_log_file='mysql-bin.000001', -> master_log_pos=429; mysql> start slave;
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.18.212 Master_User: sync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 539 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 363 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ......
可以看到IO和SQL线程均为YES,说明主从配置成功。
9. 从库查看weibo库里面的表
mysql> show tables; +---------------------------+ | Tables_in_weibo | +---------------------------+ | test_tb |
发现刚才模拟创建的test_tb2表已经同步过来。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!