MySQL主从复制(Master-Slave)
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基
1 复制概述
Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
1.1 mysql支持的复制类型:
(1)基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
(2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3)混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
1.2 复制解决的问题
MySQL复制技术有以下一些特点:
(1) 数据分布 (Data distribution )
(2) 负载平衡(load balancing)
(3) 备份(Backups)
(4) 高可用性和容错行 High availability and failover
1.3 复制如何工作
整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。
2 .复制配置
有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的。
要点:
负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限。
一、安装MySQL
说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22
二、配置MySQL主服务器(192.168.21.169)
mysql -u root -p #进入MySQL控制台 create database AMT_DB; #建立数据库AMT_DB insert into mysql.user(Host,User,Password) values ('localhost','archermind',password('123456')); #创建用户archermind,建立MySQL主从数据库同步用户replication密码123456 flush privileges; #刷新系统授权表 #授权用户replication只能从192.168.21.168这个IP访问主服务器192.168.21.169上面的数据库,并且只具有数据库备份的权限 grant replication slave on *.* to 'replication'@'192.168.21.168' identified by '123456' with grant option;
三、把MySQL主服务器192.168.21.169中的数据库AMT_DB导入到MySQL从服务器192.168.21.168中
1、导出数据库AMT_DB
mysqldump -u root -p AMT_DB > /home/replication.sql #在MySQL主服务器进行操作,导出数据库AMT_DB到/home/replication.sql
备注:在导出之前可以先进入MySQL控制台执行下面命令
flush tables with read lock; #数据库只读锁定命令,防止导出数据库的时候有数据写入 unlock tables; #解除锁定
2、导入数据库到MySQL从服务器
mysql -u root -p #进入从服务器MySQL控制台 create database AMT_DB; #创建数据库 use AMT_DB #进入数据库 source /home/replication.sql #导入备份文件到数据库 mysql -u replication -h 192.168.21.169 -p #测试在从服务器上登录到主服务器
四、配置MySQL主服务器的my.cnf文件
#vim /etc/my.cnf #编辑配置文件,在[mysqld]部分添加下面内容 server-id=1 #设置服务器id,为1表示主服务器,注意:如果原来的配置文件中已经有这一行,就不用再添加了。 log_bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。 binlog-do-db=AMT_DB #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行 binlog-ignore-db=mysql #不同步mysql系统数据库 #service mysqld restart #重启MySQL
mysql -u root -p #进入mysql控制台 show master status; 查看主服务器,出现以下类似信息 +------------------+----------+--------------+------------------+ |File |Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 7131 | AMT_DB |mysql | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
注意:这里记住File的值:mysql-bin.000001和Position的值:7131,后面会用到。
五、配置MySQL从服务器的my.cnf文件
#vim /etc/my.cnf #编辑配置文件,在[mysqld]部分添加下面内容 server-id=2 #配置文件中已经有一行server-id=1,修改其值为2,表示为从数据库 log-bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。 replicate-do-db=AMT_DB #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行 replicate-ignore-db=mysql #不同步mysql系统数据库 :wq! #保存退出 #service mysqld restart #重启MySQL
注意:MySQL 5.1.7版本之后,已经不支持把master配置属性写入my.cnf配置文件中了,只需要把同步的数据库和要忽略的数据库写入即可。
mysql -u root -p #进入MySQL控制台 slave stop; #停止slave同步进程 change master to master_host='192.168.21.169',master_user='replication',master_password='123456',master_log_file='mysql-bin.000001' ,master_log_pos=7131; #执行同步语句 slave start; #开启slave同步进程 SHOW SLAVE STATUS\G #查看slave同步信息,出现以下内容 *************************** 1. row *************************** Slave_IO_State:Waiting for master to send event Master_Host:192.168.21.169 Master_User:replication Master_Port:3306 Connect_Retry:60 Master_Log_File:mysql-bin.000001 Read_Master_Log_Pos:7131 Relay_Log_File:MySQLSlave-relay-bin.000001 Relay_Log_Pos:253 Relay_Master_Log_File:mysql-bin.000001 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB:AMT_DB Replicate_Ignore_DB:mysql Replicate_Do_Table: Replicate_Ignore_Table: 1 row in set (0.00 sec)
注意查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上这两个参数的值为Yes,即说明配置成功!
六、测试MySQL主从服务器双机热备是否成功
1、进入MySQL主服务器
mysql -u root-p #进入主服务器MySQL控制台 use AMT_DB #进入数据库 CREATETABLE test ( id int not null primary key,name char(20)); #创建test
2、进入MySQL从服务器
mysql -u root-p #进入MySQL控制台 use AMT_DB #进入数据库 show tables; #查看AMT_DB表结构,会看到有一个新建的表test,表示数据库同步成功
至此,MySQL数据库配置主从服务器实现双机热备

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。
