MySQL支持单向、异步复制,一台作为Master服务器、多台作为Slave服务器。
MySQL主从复制通常采用单主星型结构,如A-->B、A-->C;当然,也可以采用链式结构,如A-->B-->C。
主服务器将更新写入二进制日志文件(log-bin),并传递给从服务器再执行一次。通常情况下,一旦主服务器的日志文件更新,从服务器就会立即启动复制,只要网络和硬件性能足够,这个延迟会非常小(趋于0是差不多就是同步了)。
主、从服务器均保持在线,允许同时对外提供服务,也相当于一种负载均衡(只读的)。
从服务器可以设置为只读,以避免误操作造成的不一致性,也因此可以将数据库查询、更新分离(A可读可写,B/C只读)。
##############################################################################
系统环境:
RHEL 5.5 [2.6.18-194.el5]
软件环境:
mysql-server-5.0.77-4.el5_4.2
mysql-5.0.77-4.el5_4.2 采用RHEL5自带的RPM包安装,主、从服务器都装上,默认的数据库目录位于 /var/lib/mysql/
##############################################################################
一、MySQL主服务器(server105,192.168.4.105) 1. 备份现有库 方法1,在线热备份:
[root@server105 ~]# mysqldump -u root -p --all-databases > /tmp/mysql-master.sql 方法2,二进制冷备:
[root@server105 ~]# service mysqld stop #//也可以不停止,改为锁定(mysql> FLUSH TABLES WITH READ LOCK;)
[root@server105 ~]# cd /var/lib/mysql/
[root@server105 mysql]# tar zcpvf /tmp/mysql-master.tar.gz ./
[root@server105 mysql]# service mysqld start
2. 修改my.cnf配置,重启mysqld服务
[root@server105 ~]# cp /etc/my.cnf /etc/my.cnf.origin
[root@server105 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin #//使用二进制日志文件
server-id=1 #//指定服务器标识,参与复制的每台服务器不能相同
innodb_flush_log_at_trx_commit=1 #//提高InnoDB复制的耐受性、一致性
sync-binlog=1 #//启用日志同步
.. .. [root@server105 ~]# service mysqld restart
3. 创建复制账户
对于仅执行复制的账户,只要授予 REPLICATION SLAVE 权限就够了;
如果计划让从服务器使用 LOAD 方式导入主库(LOAD DATA FROM MASTER、LOAD TABLE FROM MASTER),还需要授予 SUPER、RELOAD 全局权限,以及对相关库表的 SELECT 权限。在执行 LOAD 操作时对于无 SELECT 权限的表将会被忽略到,从而易造成主从的不一致性。 [root@server105 ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicater'@'192.168.4.%' IDENTIFIED BY 'pwd @123 '; 或者 [root@server105 ~]# mysql -u root -p
mysql> GRANT REPLICATION SLAVE,SUPER,RELOAD,SELECT ON *.* TO 'replicater'@'192.168.4.%' IDENTIFIED BY 'pwd @123 ';
4. 确认主库状态
记下日志文件名(mysql-bin.000005)、偏移量(3586),从服务器首次复制时需要用到 mysql> SHOW MASTER STATUS;
+---------------- -+------------------+-------------------+----------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+------------------+-------------------+----------------------+
| mysql-bin.000005 | 3586 | | |
+---------------------+------------------+-------------------+----------------------+
1 row in set (0.00 sec) 二、MySQL从服务器(server205,192.168.4.205) 1. 导入现有库(主库的备份) 方法1,在线热导入:
[root@server205 ~]# scp 192.168.4.105:/tmp/mysql-master.sql /tmp/
[root@server205 ~]# mysql -u root -p [root@server205 ~]# service mysqld stop
[root@server205 ~]# rm -rf /var/lib/mysql/* #//此步骤可选
[root@server205 ~]# scp 192.168.4.105:/tmp/mysql-master.tar.gz /tmp/
[root@server205 ~]# tar zxpvf /tmp/mysql-master.tar.gz -C /var/lib/
[root@server205 ~]# service mysqld start
2. 修改my.cnf配置,重启mysqld服务
[root@server205 ~]# cp /etc/my.cnf /etc/my.cnf.origin
[root@server205 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin #//使用二进制日志文件
server-id=2 #//指定服务器标识,参与复制的每台服务器不能相同
innodb_flush_log_at_trx_commit=1 #//提高InnoDB复制的耐受性、一致性
sync-binlog=1 #//启用日志同步 [root@server205 ~]# service mysqld restart
3. 启动从库复制 1)首次复制操作
[root@server205 ~]# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.4.105',
MASTER_USER='replicater',
MASTER_PASSWORD='pwd @123 ',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=3586; mysql> SLAVE START; #//启用从库复制 2)查看连接信息
[root@server205 ~]# head /var/lib/mysql/master.info #//连接信息会存于此文件,提供给mysqld服务调用
14
mysql-bin.000005
3586
192.168.4.105
replicater
pwd @123
3306
60
0
.. .. 3)确认复制状态
mysql> SHOW SLAVE STATUS/G
******************************* 1. row **********************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.105
Master_USER: replicater
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 3586
Relay_Log_File: mysqld-relay-bin-bin.000016
Relay_Log_Pos: 372
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes #//从服务器的IO线程已运行
Slave_SQL_Running: Yes #//从服务器的SQL线程已运行
.. ..
.. ..
Seconds_Behind_Master: 0 #//此项可反映主-->从复制延迟,0为最理想状态(无延迟)
1 row in set (0.00 sec)
4. 调整服务脚本,重启mysqld服务
通过修改start()函数的执行语句,可以调控mysqld服务的启动选项。例如:
--log-slave-updates=1 #//记录从库更新,以便允许链式复制
--read-only #//将从库设为只读,仅允许从服务器线程或具有SUPER权限的用户执行
--relay-log=mysqld-relay-bin #//使用固定的中继日志文件
--report-host=server205 #//报告给主服务器的主机名或IP地址
--slave_compressed_protocol=1 #//复制过程启用压缩,若启用此项,主、从服务器都应该添加
--replicate-do-db=mysql #//仅复制指定的库,其他库将被忽略,此选项可设置多条(省略时复制所有库)
--replicate-do-db=mytestdb
--replicate-ignore-db=test #//不复制(忽略)指定的库,此选项也可以设置多条,do和ignore用其中一种就可以了
--skip-slave-start #//服务器启动时跳过复制,需要手动 SLAVE START
--slave-net-timeout=60 #//当从服务器网络中断时,再次重试之前等待的时间(默认为60秒)
--master-connect-retry=60 #//当主服务器连接丢失时,再次重试之前等待的时间(默认为60秒)
.. .. [root@server205 ~]# vim /etc/init.d/mysqld
.. ..
sart() {
.. ..
EXTRA_ARGS="--log-slave-updates=1 --read-only --relay-log=mysqld-relay-bin --report-host=server205 --slave_compressed_protocol=1 --replicate-do-db=mysql -- replicate-do-db=mytestdb"
/usr/bin/mysqld_safe --datadir="$datadir" --socket="$socketfile" /
--log-error="$errlogfile" --pid-file="$mypidfile" /
--user=mysql $EXTRA_ARGS > /dev/null 2>&1 &
ret=$?
.. ..
}
.. .. [root@server205 ~]# service mysqld restart
三、验证主、从同步效果 1. 在主服务器上,执行更新操作
针对配置为执行复制的库,可以做建库/删库、建表/删表、添加/修改/删除表记录等各种更新操作。 2. 在从服务器上,观察数据库的变化
通过SELECT查询确认结果,与主服务器的数据库操作结果一致,几乎是实时的。

MySQLは、初心者がデータベーススキルを学ぶのに適しています。 1.MySQLサーバーとクライアントツールをインストールします。 2。selectなどの基本的なSQLクエリを理解します。 3。マスターデータ操作:テーブルを作成し、データを挿入、更新、削除します。 4.高度なスキルを学ぶ:サブクエリとウィンドウの関数。 5。デバッグと最適化:構文を確認し、インデックスを使用し、選択*を避け、制限を使用します。

MySQLは、テーブル構造とSQLクエリを介して構造化されたデータを効率的に管理し、外部キーを介してテーブル間関係を実装します。 1.テーブルを作成するときにデータ形式と入力を定義します。 2。外部キーを使用して、テーブル間の関係を確立します。 3。インデックス作成とクエリの最適化により、パフォーマンスを改善します。 4.データベースを定期的にバックアップおよび監視して、データのセキュリティとパフォーマンスの最適化を確保します。

MySQLは、Web開発で広く使用されているオープンソースリレーショナルデータベース管理システムです。その重要な機能には、次のものが含まれます。1。さまざまなシナリオに適したInnodbやMyisamなどの複数のストレージエンジンをサポートします。 2。ロードバランスとデータバックアップを容易にするために、マスタースレーブレプリケーション機能を提供します。 3.クエリの最適化とインデックスの使用により、クエリ効率を改善します。

SQLは、MySQLデータベースと対話して、データの追加、削除、変更、検査、データベース設計を実現するために使用されます。 1)SQLは、ステートメントの選択、挿入、更新、削除を介してデータ操作を実行します。 2)データベースの設計と管理に作成、変更、ドロップステートメントを使用します。 3)複雑なクエリとデータ分析は、ビジネス上の意思決定効率を改善するためにSQLを通じて実装されます。

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

MySQLデータベースを構築する手順には次のものがあります。1。データベースとテーブルの作成、2。データの挿入、および3。クエリを実行します。まず、createdAtabaseおよびcreateTableステートメントを使用してデータベースとテーブルを作成し、InsertINTOステートメントを使用してデータを挿入し、最後にSelectステートメントを使用してデータを照会します。

MySQLは、使いやすく強力であるため、初心者に適しています。 1.MYSQLはリレーショナルデータベースであり、CRUD操作にSQLを使用します。 2。インストールは簡単で、ルートユーザーのパスワードを構成する必要があります。 3.挿入、更新、削除、および選択してデータ操作を実行します。 4. Orderby、Where and Joinは複雑なクエリに使用できます。 5.デバッグでは、構文をチェックし、説明を使用してクエリを分析する必要があります。 6.最適化の提案には、インデックスの使用、適切なデータ型の選択、優れたプログラミング習慣が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター
