1.背景
前のプロジェクトでは、最も基本的で最も主流のデータベースはスタンドアロンデータベースであり、読み取りと書き込みの両方が1つのライブラリにありました。ユーザー数が徐々に増加し、スタンドアロンデータベースがパフォーマンス要件を満たせなくなると、読み取りと書き込みの分離変換が実行され(読み取りを増やし、書き込みを減らすことができます)、1つのライブラリに書き込み、複数のライブラリに読み取ります。データベースクラスターで、マスターとスレーブのバックアップ、1つのマスターと複数のスレーブを開いて、読み取りパフォーマンスを向上させます。ユーザーがこれ以上の読み取りと書き込みの分離に対応できない場合は、分散データベースが必要です。(MyCat、sharing-jdbc、Canalなどを使用)、Ant Financial、Oceanbase。
通常の状況では、読み取りと書き込みの分離を実現するには、最初に1つのマスターと複数のスレーブを持つデータベースクラスターを作成する必要があり、データの同期も必要です。この記事では、mysqlを使用して1マスターの複数構成を構築する方法を記録します。
次の記事では、コードレベルで読み取りと書き込みを分離する方法を記録します。
2.1つのマスターと複数のスレーブでデータベースクラスターを構築します
マスタースレーブバックアップには複数の仮想マシンが必要です。wmwareを使用して複数のインスタンスを完全に複製する場合、仮想マシンを直接複製すると各データベースのuuidが同じになり、異なるuuidに変更する必要があることに注意してください。 。
コア構成は次のとおりです。
メインライブラリの構成
マスターデータベースに新しいユーザーを作成して、データベース(スレーブ)からマスターデータベースのバイナリログを読み取ります。sqlステートメントは次のとおりです。
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY '123456';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';#分配权限
mysql>flush privileges; #刷新权限
同時に、mysql構成ファイルを変更してバイナリログをオンにします。新しい部分は次のとおりです。
[mysqld]
server-id=1
log-bin=master-bin #这边写的是对应bin的日志名称
log-bin-index=master-bin.index
次に、データベースを再起動し、メインライブラリのshow master status;
ステートメントを使用して、以下に示すようにメインライブラリのステータスを表示します。
ライブラリから構成する
また、最初に数行の構成を追加します。
[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
次に、データベースを再起動し、次のステートメントを使用してメインライブラリに接続します。
CHANGE MASTER TO
MASTER_HOST='192.168.226.5',
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=6953;
次に、スレーブライブラリstart slave;
でバックアップを実行します。通常の状況を次の図に示します。Slave_IO_RunningとSlave_SQL_Runningはどちらもyesです。
この手順を使用して、複数のスレーブライブラリを開くことができます。
デフォルトでは、メインライブラリのすべての操作がスレーブライブラリにバックアップされます。実際には、一部のライブラリを無視する必要がある場合があります。メインライブラリに次の構成を追加できます。
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
実際のデモンストレーション
デモを容易にするために、[ Win10を使用して複数のmysqlインスタンスをインストールする]を使用しました。原則は同じです。
1.mysqlの最新の解凍バージョンをダウンロードします。これはmysql-8.0.22です。
解凍してコピーを作成します。それぞれ新しいmy.iniファイルを作成します。
my.iniコンテンツリファレンス:ポートの変更に注意してください
[mysqld]
# 设置3306端口
port=3307
# 设置mysql的安装目录# 切记此处一定要用双斜杠
basedir=D:\\DevPackTool\\InstallPack\\mysql1
# 设置mysql数据库的数据的存放目录
datadir=D:\\DevPackTool\\InstallPack\\mysql1\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=UTF8MB4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#开启binlog
log-bin=mysql-bin
replicate-do-db=test
server-id=3307
[mysql]
# 设置mysql客户端默认字符集
default-character-set=UTF8MB4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=UTF8MB4
2.mysqlを作成します
最初のmysql
CMDは次のディレクトリに入ります:D:\ DevPackTool \ InstallPack \ mysql1 \ bin、(独自のインストールパスを選択)コマンドを実行するには管理者権限が必要です:
|
|
コンソールにパスワードが出力されます。初期化パスワードを覚えておいてください。ルートディレクトリのデータフォルダを削除するのを忘れた場合は、上記のステートメントを再度実行してください。
D:\ DevPackTool \ InstallPack \ mysql1 \ binパスでサービス作成コマンドを引き続き実行し、サービスにMySQL1という名前を付けます。
mysqld --install mysql1
サービスを有効にする:
net start mysql1
mysqlにログインします。
mysql -uroot -p
输入密码
パスワードを変更します。
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
2番目のmysql
原則は上記と同じです。デフォルトは3306であるため、ログイン後はポート番号の追加に注意する必要があります。3306はすでにMySQL1によって占有されており、MySQL2は3307です。ログイン時にポートを指定する必要があります。
mysql -uroot -P3307 -p
输入密码
#注意大写-P3307
構成は上記を参照しており、メインライブラリとスレーブライブラリで構成する必要があります。
1.構成ファイルの構成
メインライブラリ:
ライブラリから:
2.構成を開始します
メインライブラリの構成
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' ; CREATE USER 'repl_user'@'%' IDENTIFIED BY '123456' SHOW SLAVE STATUS USE test SHOW MASTER STATUS
ライブラリからの構成:
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='repl_user', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=5905; START SLAVE; SHOW SLAVE STATUS
コマンドラインで表示することもできます
3.同期効果をテストします。