yum によってインストールされた mysql8 は、同じマシン (同じホスト) 上にマスター/スレーブ構成のデプロイメントを実装します (詳細な画像とテキストの説明)

まず、yum を使用して mysql8 をインストールしましたが、インストール方法がまだわかりませんか? (私の他の投稿を参照してください)非常にシンプルです

CentOS7 は yum を使用して MySQL8 とさまざまなバージョンをインストールします_xiaomaomixj のブログ - CSDN ブログ

まずマスター/スレーブ構成環境をデプロイしましょう。

yum を使用して mysql をインストールした後、最初に /etc/my.cnf ファイルを確認します。このファイルにはデータ ファイル、ログ ファイルなどが含まれています。

vim /etc/my.cnf

datadir: データベース データが保存されるディレクトリ (例: mysql データベースのユーザー テーブル) (後で使用します)

socker: このファイルは、mysqld サービスの実行時に生成され、mysql 接続に使用されます。

log-error: mysqld のログ メッセージを保存するために使用されます。

pid-file: mysqld サービスのプロセス ID を指定します。

さて、簡単に理解した後でデプロイメントを開始しましょう。

このマスター/スレーブ構成が元の mysql に影響しないことを願っているため、mysql_1 と mysql_2 の 2 セットの構成ファイルを準備する必要があります (mysql_1 がマスター、mysql_2 がスレーブ)。

次は設定ファイルです (パスは自分で決めます)。

cd /test
mkdir mysql_master_slave
cd mysql_master_slave
mkdir mysql_1
mkdir mysql_2

最終的には次のようになります。

 次に、mysql_1 と mysql_2 をそれぞれ入力し、設定ファイルの作成を開始します (注: /var/lib/mysql は、上記の datadir へのパスです)。

cd mysql_1
mkdir logs
cp /var/lib/mysql mysql
vim my.cnf
cd mysql_2
mkdir logs
cp /var/lib/mysql mysql
vim my.cnf

vim に入力する内容:

mysql_1(my.cnf):

[client]

port = 3307

[mysqld]

datadir=/test/mysql_master_slave/mysql_1/mysql
log-error=/test/mysql_master_slave/mysql_1/logs/mysqld.log
user=mysql
port = 3307
socket=/test/mysql_master_slave/mysql_1/mysql/mysql.sock

mysql_2(my.cnf):

[client]

port = 3308

[mysqld]

datadir=/test/mysql_master_slave/mysql_2/mysql
log-error=/test/mysql_master_slave/mysql_2/logs/mysqld.log
user=mysql
port = 3308
socket=/test/mysql_master_slave/mysql_2/mysql/mysql.sock

このことから、構成ファイル内のパスが作成したパスに対応していることがわかります (つまり、パスが私のパスと異なる場合は、自分で変更する必要があります)。

 次に、これらのファイルに対する権限を mysql に与える必要があります。

cd /test
chown -R mysql:mysql mysql_master_slave/

次に、以下を開始します。

mysql_1:

mysqld --defaults-file=/test/mysql_master_slave/mysql_1/my.cnf

mysql_2:

mysqld --defaults-file=/test/mysql_master_slave/mysql_2/my.cnf

もちろん、多くの端末を開きたくない場合は、バックグラウンドで実行させることもできます (私は複数の端末を一緒に使用することを好みます。これは便利です)

mysqld --defaults-file=/test/mysql_master_slave/mysql_1/my.cnf &
mysqld --defaults-file=/test/mysql_master_slave/mysql_2/my.cnf &

mysqld プロンプトがコマンドでない場合は、$PATH 変数を確認する必要があります。

echo $PATH
find / -name mysqld

mysqld コマンドが $PATH 変数にあることがわかります。 

正常に起動すると、/test/mysql_master_slave/mysql_1/mysql/mysql.sock ファイルと /test/mysql_master_slave/mysql_2/mysql/mysql.sock ファイルが表示されます。これらは起動前には存在しませんでした。 mysqld サービスの実行時に生成されるファイル。

sock$:$ は正規表現の終わりを意味します

lsof -c mysqld|grep sock$

 mysql.sock ファイルを使用すると、ログインに使用できます。

mysql_1:

mysql -uroot -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

mysql_2:

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

前に述べたように、(datadir: データベース データが保存されているディレクトリ (例: mysql データベースのユーザー テーブル)、つまりパスワードが含まれます)パスワードは元の mysql パスワードです

ログイン後、mysql_1 と mysql_2 が分離されていることをテストします。

mysql_1:

show databases;
create database xiaomaomi;
show databases;

 mysql_2:

show databases;
show databases;

 mysql_1 で作成された xiaomaomi データベースが mysql_2 に存在しないことがわかりました。

これで、マスター/スレーブ構成環境がデプロイされました。

次に、マスター/スレーブ構成のデプロイメントです。

まず、前にログインした mysql を閉じます。

exit

mysql_1: 

 mysql_2:

 次に、mysql_1 サービスと mysql_2 サービスをオフにする必要があります (プロセス サービスを強制終了するには kill を使用します)。

ps -ef | grep mysqld
kill 36986
kill 37033

 次に、mysql_1 と mysql_2 の構成ファイル (my.cnf) を変更します (マスターとスレーブのサーバー ID を同じにすることはできないことに注意してください)。

binlog-do-db: 同期する必要があるデータベースを設定します (複数のデータベースを使用する場合は分割します)

replicate-do-db: 上記と同じ意味です

mysql_1(主)(my.cnf):

server-id=1
log-bin=mysql-bin
binlog-do-db=xjgg

mysql_2 (から) (my.cnf):

server-id=2
log-bin=mysql-bin
replicate-do-db=xjgg

罠を踏んでしまったので(後ほどエラーが報告されるので、先にここで解決しましょう)、実演はせず、ここで解決するだけです。

 错误:([ERROR] [MY-013117] [Repl] チャネル '' のスレーブ I/O: 致命的エラー: マスターとスレーブの MySQL サーバー UUID が等しいため、スレーブ I/O スレッドが停止します。レプリケーションが機能するには、これらの UUID が異なっている必要があります。エラーコード: MY-013117

理由: 以前に datadir ディレクトリを直接コピーしたため、ディレクトリ内の /test/mysql_master_slave/mysql_1/mysql/auto.cnf のserver-uuid は /test/mysql_master_slave/mysql_2/mysql/auto.cnf と同じです。

解決策: /test/mysql_master_slave/mysql_2/mysql/auto.cnf を変更します。

vim /test/mysql_master_slave/mysql_2/mysql/auto.cnf

 必要に応じて内容を入力します。ただし、/test/mysql_master_slave/mysql_1/mysql/auto.cnf と /test/mysql_master_slave/mysql_2/mysql/auto.cnf のサーバー UUID が異なることを確認してください。

次に、mysql_1 サービスを開始します。

mysqld --defaults-file=/test/mysql_master_slave/mysql_1/my.cnf

mysql_2 サービス:

mysqld --defaults-file=/test/mysql_master_slave/mysql_2/my.cnf

次に、再度ログインします。

mysql_1:

mysql -uroot -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

mysql_2:

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

まず、データの一貫性を維持し、 mysql_1 と mysql_2 にデータベース xjgg をそれぞれ作成し、テスト テーブルを作成する必要があります。

CREATE DATABASE xjgg charset utf8;
use xjgg;
CREATE TABLE test (id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10),jieshao VARCHAR(30)) charset utf8;
show tables;

mysql_1:

mysql_2:

mysql_1 で実行します。

#创建账户
create user 'zyh'@'127.0.0.1' identified by 'Xmm123456!';

#赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant replication slave on *.* to 'zyh'@'127.0.0.1' with grant option;

#改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;

#加锁(解锁:unlock tables)
flush tables with read lock;

#这个生成的信息一会要用
show master status;

#解锁
UNLOCK TABLES;

 次にログアウトし、このアカウントでログインしてテストしてみましょう。

exit
mysql -uzyh -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

次に、mysql_2 で実行します。

mysql_2 のサービスを使用して mysql_1 の zyh アカウントにログインし、成功するかどうかをテストします。

mysql -uzyh -h 127.0.0.1 -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3307 -p

 次に、mysql_2 の root アカウントにログインします。

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

master_host = '127.0.0.1'、
master_port = 3307、
master_user = 'zyh'、
master_password = 'Xmm123456!'、
master_log_file='mysql-bin.000001'、
master_log_pos=1369;
これらのデータはすべて上記ですので、1つずつ対応させてください。 。 

#停止同步
stop slave;

#修改从库指向主库,使用上一步记录的文件名以及位点(注意没到分号就是一条语句)
CHANGE MASTER TO
master_host = '127.0.0.1',
master_port = 3307,
master_user = 'zyh',
master_password = 'Xmm123456!',
master_log_file='mysql-bin.000001',
master_log_pos=1369;

#启动同步
start slave;

#查看从库状态,Slave_IO_Running和Slave_SQL_Running都为yes说明同步成功,如果不为yes,请检查error_log,然后排查相关异常
show slave status\G;

 これで展開は完了です!

テストしてみましょう:

mysql_1 にログインします。

mysql -uroot -S /test/mysql_master_slave/mysql_1/mysql/mysql.sock -P 3307 -p

いくつかの情報を挿入します。

use xjgg;
INSERT INTO test (name,jieshao) values ('小猫咪','睡觉使我快乐!'),('张三','法外狂徒'),('李四','没有介绍!');
select * from test;

 次に、mysql_2 が自動的に変更されたかどうかを確認してみましょう。

mysql -uroot -S /test/mysql_master_slave/mysql_2/mysql/mysql.sock -P 3308 -p

情報を直接クエリします。

use xjgg;
select * from test;

 データが正常に同期されていることがわかりました。

提案: MySQL のマスター/スレーブ メカニズムは比較的壊れやすいため、注意して操作する必要があります。mysql_1 を再起動する場合は、まず mysql_2 のスレーブを停止する必要があります。つまり、mysql_2 で stop smile コマンドを実行してから、mysql_1 の MySQL サービスを再起動する必要があります。そうしないと、サービスが中断される可能性があります。再起動が完了した後も、mysql_2 スタート スレーブをオンにする必要があります。

個人的な要約 (これは著者自身に対するものです):

mysql ログイン コマンドを直接実行するために使用される mysql.sock は /var/lib/mysql/mysql.sock です。

mysqld サービス コマンドを直接実行するために使用される my.cnf は /etc/my.cnf です。

これらを理解することで初めて、1 台のホストでマスタ/スレーブ構成を構築できます。

終わり...

おすすめ

転載: blog.csdn.net/xiaomaomixj/article/details/126110211
おすすめ