Heim Backend-Entwicklung PHP-Tutorial 不停止 MySQL 服务增加从库的两种方式

不停止 MySQL 服务增加从库的两种方式

Jul 25, 2016 am 08:46 AM

现在生产环境mysql数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。
一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表。为什么不锁表?因为自身会监控主库日志,如果有更新的数据,就会先写到一个文件中,然后再回归到备份文件中,从而保持数据一致性。
服务器信息:
主库:192.168.18.212(原有)
从库1:192.168.18.213(原有)
从库2:192.168.18.214(新增)
数据库版本:MySQL5.5
存储引擎:Innodb
测试库名:weibo
一、mysqldump方式
MySQL主从是基于binlog日志,所以在安装好数据库后就要开启binlog。这样好处是,一方面可以用binlog恢复数据库,另一方面可以为主从做准备。
原有主库配置参数如下:
# 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. 主库创建同步账号
mysql> grant all on*.* to 'sync'@'192.168.18.%' identified by 'sync';
2. 从库配置MySQL
# 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. 备份主库
# mysqldump -uroot -p123--routines --single_transaction --master-data=2 --databases weibo >weibo.sql
参数说明:
--routines:导出存储过程和函数
--single_transaction:导出开始时设置事务隔离状态,并使用一致性快照开始事务,然后unlock tables;而lock-tables是锁住一张表不能写操作,直到dump完毕。
--master-data:默认等于1,将dump起始(change master to)binlog点和pos值写到结果中,等于2是将changemaster to写到结果中并注释。
4. 把备份库拷贝到从库
# scp weibo.sqlroot@192.168.18.214:/home/root
5. 在主库创建test_tb表,模拟数据库新增数据,weibo.sql是没有的
mysql> create tabletest_tb(id int,name varchar(30));
6. 从库导入备份库
# mysql -uroot -p123 -e'create database weibo;'
# mysql -uroot -p123weibo
7. 在备份文件weibo.sql查看binlog和pos值
# head -25 weibo.sql
-- CHANGE MASTER TOMASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;   #大概22行
8. 从库设置从这个日志点同步,并启动
mysql> change masterto 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 slavestatus\G;
ERROR 2006 (HY000): MySQLserver has gone away
No connection. Trying toreconnect...
Connection id:    90
Current database: ***NONE ***
***************************1. row ***************************
               Slave_IO_State: Waiting formaster 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
......
9. 从库查看weibo库里面的表
可以看到IO和SQL线程均为YES,说明主从配置成功。
mysql> show tables;
+---------------------------+
| Tables_in_weibo           |
+---------------------------+
| test_tb                   |
发现刚才模拟创建的test_tb表已经同步过来!
二、xtrabackup方式(推荐)
在上面配置基础上做实验,先删除掉从库配置:
mysql> stopslave;         #停止同步
mysql> resetslave;        #清除从连接信息
mysql> show slavestatus\G;   #再查看从状态,可以看到IO和SQL线程都为NO
mysql> drop databaseweibo;   #删除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 rootroot     4096 Jul  1 16:49 ./
drwx------ 4 rootroot     4096 Jul  1 16:49 ../
-rw-r--r-- 1 rootroot      188 Jul  1 16:49 backup-my.cnf
-rw-r----- 1 root root18874368 Jul  1 16:49 ibdata1
drwxr-xr-x 2 rootroot     4096 Jul  1 16:49 mysql/
drwxr-xr-x 2 rootroot     4096 Jul  1 16:49 performance_schema/
drwxr-xr-x 2 rootroot    12288 Jul  1 16:49 weibo/
-rw-r--r-- 1 rootroot       21 Jul  1 16:49 xtrabackup_binlog_info
-rw-r----- 1 rootroot       89 Jul  1 16:49 xtrabackup_checkpoints
-rw-r--r-- 1 rootroot      563 Jul  1 16:49 xtrabackup_info
-rw-r----- 1 rootroot     2560 Jul  1 16:49 xtrabackup_logfile
2. 把备份目录拷贝到从库上
# scp -r2015-07-01_16-49-43 root@192.168.18.214:/home/root
3. 从库上把MySQL服务停掉,删除datadir目录,将备份目录重命名为datadir目录
# sudo rm -rf/var/lib/mysql/
# sudo mv2015-07-01_16-49-43/ /var/lib/mysql
# sudo chown mysql.mysql-R /var/lib/mysql
# sudo /etc/init.d/mysqlstart
# ps -ef |grep mysql    #查看已经正常启动
mysql     8832    1  0 16:55 ?        00:00:00 /usr/sbin/mysqld
4. 在主库创建test_tb2表,模拟数据库新增数据
mysql> create tabletest_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) (revisionid: )
server_version =5.5.43-0ubuntu0.12.04.1-log
start_time = 2015-07-0116:49:43
end_time = 2015-07-0116: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 masterto 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 slavestatus\G;
***************************1. row ***************************
               Slave_IO_State: Waiting formaster 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
......
7. 从库查看weibo库里面的表
可以看到IO和SQL线程均为YES,说明主从配置成功。
mysql> show tables;
+---------------------------+
| Tables_in_weibo           |
+---------------------------+
| test_tb                   |
| test_tb2                  |
发现刚才模拟创建的test_tb2表已经同步过来。
免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/
学PHP、Linux、HTML5、UI、Android等视频教程(课件+笔记+视频)!联系Q2430675018
参加活动领取兄弟连原创视频教程光盘合集:http://www.lampbrother.net/newcd.html



Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Wie debugge ich den CLI -Modus in PhpStorm? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

See all articles