Heim  >  Artikel  >  Datenbank  >  Zwei Möglichkeiten zum Hinzufügen von Slave-Datenbanken, ohne den MySQL-Dienst zu stoppen

Zwei Möglichkeiten zum Hinzufügen von Slave-Datenbanken, ohne den MySQL-Dienst zu stoppen

怪我咯
怪我咯Original
2017-04-06 18:09:291448Durchsuche

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

1. MySQLdump-Methode

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=&#39;mysql-bin.000001&#39;, MASTER_LOG_POS=107;   #大概22行

8. Synchronisieren Sie die Slave-Bibliothekseinstellungen von diesem Protokollpunkt und start

mysql> change master to master_host=&#39;192.168.18.212&#39;,
    -> master_user=&#39;sync&#39;,
    -> master_password=&#39;sync&#39;,
    -> master_log_file=&#39;mysql-bin.000001&#39;,
    -> 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表已经同步过来!

二、xtrabackup方式(推荐)

在上面配置基础上做实验,先删除掉从库配置:

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 &#39;mysql-bin.000001&#39;, 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=&#39;192.168.18.212&#39;,
    -> master_user=&#39;sync&#39;,
    -> master_password=&#39;sync&#39;,
    -> master_log_file=&#39;mysql-bin.000001&#39;,
    -> 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn