ホームページ データベース mysql チュートリアル Mysql、MariaDB传统主从集群配置

Mysql、MariaDB传统主从集群配置

Jun 07, 2016 pm 02:56 PM
mariadb mysql 構成 集まる

Mysql和MariaDB的最基本的集群方式是主从方式,也是众多中小企业使用最多的集群方式,该集群部署简单,轻松上手,让我们一步步来吧。 测试所用版本为MariaDB 10.1 源码安装,安装到默认路径/usr/local/mysql下。 $BUILD/autorun.sh$./configure$make-j4$sudo

    Mysql和MariaDB的最基本的集群方式是主从方式,也是众多中小企业使用最多的集群方式,该集群部署简单,轻松上手,让我们一步步来吧。

    测试所用版本为MariaDB 10.1 源码安装,安装到默认路径/usr/local/mysql下。

   

$ BUILD/autorun.sh
$ ./configure
$ make -j4
$ sudo make install
ログイン後にコピー


既然是主从数据库,至少需要两个数据库实例,本文例子将两个实例部署在同一台电脑里,计划配置如下表。

实例作用
地址
端口
数据文件路径
配置文件路径

localhost
10001
/home/lyw/db/data/1
/home/lyw/db/etc/my1.cnf

localhost
10002
/home/lyw/db/data/2/home/lyw/db/etc/my2.cnf

准备两个mysql的配置文件my1.cnf, 我们从默认配置复制过来

$ mkdir -p /home/lyw/db/etc/
$ cd /usr/local/mysql
$ cp support-files/my-medium.cnf /home/lyw/db/etc/my1.cnf
$ cp support-files/my-medium.cnf /home/lyw/db/etc/my2.cnf
ログイン後にコピー


my1.cnf修改如下几行

[mysqld]
port            = 10001
socket          = /tmp/mysql1.sock
log-bin         = mysql-bin
server-id       = 10001
datadir        = /home/lyw/db/data/1
user            = lyw
ログイン後にコピー

my2.cnf修改如下几行

[mysqld]
port            = 10002
socket          = /tmp/mysql2.sock
log-bin         = mysql-bin
server-id       = 10002
datadir        = /home/lyw/db/data/2
user            = lyw
ログイン後にコピー

分别初始化两个数据库

$ mkdir -p /home/lyw/db/data/
$ scripts/mysql_install_db --defaults-file=/home/lyw/db/etc/my1.cnf
$ scripts/mysql_install_db --defaults-file=/home/lyw/db/etc/my2.cnf
ログイン後にコピー

启动两个数据库

由于是在一台电脑里,因此没有使用服务启动,而是直接用mysqld_safe启动,大家尽可根据自己的情况启动。

$ bin/mysqld_safe --defaults-file=/home/lyw/db/etc/my1.cnf  &
$ bin/mysqld_safe --defaults-file=/home/lyw/db/etc/my2.cnf  &
ログイン後にコピー

检查两个数据库是否启动成功,对应的端口和sock文件已经存在,即表示启动成功。

$ sudo netstat -nlp |grep mysql
tcp6       0      0 :::10001                :::*                    LISTEN      22211/mysqld    
tcp6       0      0 :::10002                :::*                    LISTEN      23536/mysqld    
unix  2      [ ACC ]     STREAM     LISTENING     365439   22211/mysqld        /tmp/mysql1.sock
unix  2      [ ACC ]     STREAM     LISTENING     368511   23536/mysqld        /tmp/mysql2.sock
ログイン後にコピー

MariaDB默认有两行任何本机用户都能登陆,会影响新创建的复制用户的登陆,因此需要删除。然后创建复制用户方可生效。(如果是在两台不同的电脑中运行,可以不删除这两行。)

$ bin/mysql -S /tmp/mysql1.sock -uroot
MariaDB [(none)]> use mysql;
MariaDB [mysql]> delete from user where user='';
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> grant replication slave on *.* to 'rep'@'%' identified by '123456';
ログイン後にコピー

然后查看master数据库的运行状态,记下这两个值。

MariaDB [mysql]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |     1075 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
ログイン後にコピー

在从服务器上执行

$ bin/mysql -S /tmp/mysql2.sock -uroot
MariaDB [(none)]> change master to 
master_host='localhost', 
master_port=10001, 
master_user='rep', 
master_password='123456', 
master_log_file='mysql-bin.000005', 
master_log_pos=1075;

MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: localhost
                  Master_User: rep
                  Master_Port: 10001
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 1075
               Relay_Log_File: lyw-hp-relay-bin.000002
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
ログイン後にコピー

如果Slave_IO_Running 和 Slave_SQL_Running 都为Yes,则说明启动主从配置成功。


测试:

在master数据库执行

MariaDB [mysql]> create database lyw;
Query OK, 1 row affected (0.00 sec)

MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lyw                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
ログイン後にコピー

在slave数据库执行

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lyw                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
ログイン後にコピー

可见在主库创建的数据库lyw,在从库也有。可以在主库尝试执行其他写入语句,在丛库也能看到同样的数据。


用同样的方法,一个主数据库后面可以跟多个从数据库,增加数据的可靠性和读的吞吐量。

如果主库也配置上从从库同步数据,即互为主从,那就是常说的双主,或主主,有些文章里会说修改下自增涨id以防止冲突,我却不这样认为,双主的两个数据库并非强一致,而是有一定的延迟,很多事务处理会出现错误,皆因为延迟导致。双主并不能大大增强写入的吞吐量,因为所有数据都要在每个库写入。虽然说因为批量的缘故可以有少量提升,但是对于延迟导致的错误来说,微不足道。

配置双主是有意义的,但是并非用于同时写入,同一时间还是只写一个库,而当主挂了后,为切换主从做的准备,切换后,主再次启动时,立马就能同步到从的数据。比如在cobar集群中,就可以考虑用双主配置。


以上是传统主从复制方法,从Mysql5.6和MariaDB10.0开始,有了新的主从复制方式,可参考这篇文章:http://bangbangba.blog.51cto.com/3180873/1702294 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

PHPを使用してMySQLテーブルからデータを削除するにはどうすればよいですか? PHPを使用してMySQLテーブルからデータを削除するにはどうすればよいですか? Jun 05, 2024 pm 12:40 PM

PHP には、MySQL テーブル内のデータを削除する次のメソッドが用意されています。 DELETE ステートメント: テーブルから条件に一致する行を削除するために使用されます。 TRUNCATETABLE ステートメント: 自動インクリメントされる ID を含む、テーブル内のすべてのデータをクリアするために使用されます。実際のケース: HTML フォームと PHP コードを使用して、データベースからユーザーを削除できます。フォームはユーザー ID を送信し、PHP コードは DELETE ステートメントを使用して ID に一致するレコードを users テーブルから削除します。

See all articles