Die aktuelle ProduktionsumgebungMySQL-Datenbank verfügt über einen Master und einen Slave. Da das Geschäftsvolumen weiter zunimmt, wird eine Slave-Datenbank hinzugefügt. Voraussetzung ist, dass die Online-Geschäftsnutzung dadurch nicht beeinträchtigt wird, was bedeutet, dass der MySQL-Dienst nicht neu gestartet werden kann. Um andere Situationen zu vermeiden, entscheiden Sie sich für den Betrieb während der Zeit mit geringem Website-Verkehr.
Im Allgemeinen gibt es zwei Möglichkeiten, eine Slave-Datenbank online hinzuzufügen. Eine besteht darin, die Master-Datenbank über mysqldump zu sichern und sie in der Slave-Datenbank wiederherzustellen Wenn die Datenmenge groß ist, ist die Sicherungsgeschwindigkeit sehr hoch. Wenn sie langsam ist, dauert es lange, die Tabelle zu sperren. Die andere besteht darin, die Hauptdatenbank über das xtrabackup-Tool zu sichern und sie in der Slave-Datenbank wiederherzustellen. xtrabackup ist eine physische Sicherung, die eine hohe Sicherungsgeschwindigkeit aufweist und keine Tabellen sperrt. Warum nicht den Tisch abschließen? Da das Hauptdatenbankprotokoll überwacht wird, werden aktualisierte Daten zuerst in eine Datei geschrieben und dann in die Sicherungsdatei zurückgeführt, um die Datenkonsistenz aufrechtzuerhalten.
Serverinformationen:
Hauptdatenbank: 192.168.18.212 (Original)
Slave-Datenbank 1: 192.168.18.213 (Original)
Slave-Datenbank 2: 192.168.18.214 (Neu )
Datenbankversion: MySQL5.5
Speicher-Engine: Innodb
Name der Testbibliothek: weibo
MySQL-Master-Slave basiert auf dem Binlog-Protokoll, daher muss Binlog nach der Installation der Datenbank aktiviert werden. Dies hat den Vorteil, dass Sie einerseits binlog zum Wiederherstellen der Datenbank verwenden können und andererseits die Vorbereitung für Master und Slave durchführen können.
Die ursprünglichen Hauptdatenbank-Konfigurationsparameter lauten wie folgt:
# 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. Erstellen Sie ein Synchronisierungskonto für die Hauptdatenbank
mysql> grant all on *.* to 'sync'@'192.168.18.%' identified by 'sync';
2. Konfigurieren Sie MySQL aus der Datenbank
# 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. Sichern Sie die Hauptdatenbank
# mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql
Parameterbeschreibung:
–Routinen: gespeicherte Prozeduren und Funktionen exportieren
– single_transaction: Legen Sie den Transaktionsisolationsstatus fest, wenn Der Export beginnt mit einer konsistenten Snapshot-Transaktion und dann sperrt „lock-tables“ eine Tabelle und kann keine Vorgänge schreiben, bis der Dump abgeschlossen ist.
–master-data: Der Standardwert ist gleich 1, und der Binlog-Startpunkt (Change Master to) und der Pos-Wert werden in das Ergebnis geschrieben Der Änderungsmaster wird in das Ergebnis geschrieben und mit Anmerkungen versehen.
4. Kopieren Sie die Backup-Bibliothek in die Slave-Bibliothek
# scp weibo.sql [email protected]:/home/root
5. Erstellen Sie die Tabelle test_tb in der Hauptbibliothek um die Datenbank zu simulieren. Um neue Daten hinzuzufügen, existiert weibo.sql nicht
mysql> create table test_tb(id int,name varchar(30));
6. Importieren Sie die Sicherungsdatenbank aus der Datenbank
# mysql -uroot -p123 -e 'create database weibo;' # mysql -uroot -p123 weibo < weibo.sql
7. Sichern Sie die Datei weibo.sql und überprüfen Sie die Binlog- und Pos-Werte
# head -25 weibo.sql -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; #大概22行
8. Synchronisieren Sie die Slave-Bibliothekseinstellungen von diesem Protokollpunkt und 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 ......
Sie können sehen, dass sowohl der E/A- als auch der SQL-Thread JA sind, was darauf hinweist, dass die Master-Slave-Konfiguration erfolgreich ist.
9. Sehen Sie sich die Tabellen in der Weibo-Bibliothek aus der Bibliothek an
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表已经同步过来。
Das obige ist der detaillierte Inhalt vonZwei Möglichkeiten zum Hinzufügen von Slave-Datenbanken, ohne den MySQL-Dienst zu stoppen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!