日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql multi主从复制_mysqld_multi方式配置Mysql数据库主从复制

發(fā)布時(shí)間:2025/3/11 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql multi主从复制_mysqld_multi方式配置Mysql数据库主从复制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysqld_multi設(shè)計(jì)用于管理在同一臺(tái)機(jī)器上運(yùn)行的多個(gè)mysqld進(jìn)程,這些進(jìn)程使用不同的socket文件并監(jiān)聽在不同的端口上。mysqld_multi可以批量啟動(dòng)、關(guān)閉、或者報(bào)告這些mysqld進(jìn)程的狀態(tài)。在這里我們通過這種方式來在同一個(gè)機(jī)器上啟動(dòng)多個(gè)數(shù)據(jù)庫(kù)實(shí)例,并配置主從關(guān)系。

1、下載MySQL壓縮包

wget http://dev.MySQL.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

2、創(chuàng)建安裝目錄

這里我將Mysql安裝在/usr/local/mysql目錄里面,也可以安裝在其他地方;

mkdir /usr/local/mysql

3、解壓并復(fù)制

tar -xvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.7.18-linux-glibc2.5-x86_64/* /usr/local/mysql/

4、創(chuàng)建data目錄

mkdir /usr/local/mysql/data{3306,3307,3308} -p

5、創(chuàng)建mysql用戶組及其用戶

groupadd mysql

useradd -r -g mysql mysql

6、修改權(quán)限

chown -R mysql:mysql /usr/local/mysql

7、初始化實(shí)例的數(shù)據(jù)庫(kù)

mysql_install_db 方式已經(jīng) deprecated 了,我們使用 mysqld 的 initialize 方法來做初始化

# --no-defaults 不讀取默認(rèn)的 /etc/my.cnf 全局配置文件 否則可能存在一些沖突問題

# --initialize-insecure 初始化且不需要生成密碼,我不太喜歡那一大串字符...

# --basedir mysql 的安裝目錄

# --datadir 本實(shí)例的數(shù)據(jù)目錄

# --user 這樣生成的文件用戶為 mysql

# --explicit_defaults_for_timestamp timestamp 已經(jīng) deprecated 了

#生成 3306 的數(shù)據(jù)目錄

[root@localhost ~]# mysqld --no-defaults --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data3306 --user=mysql --explicit_defaults_for_timestamp

#生成 3307 的數(shù)據(jù)目錄

[root@localhost ~]# mysqld --no-defaults --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data3307 --user=mysql --explicit_defaults_for_timestamp

#生成 3307 的數(shù)據(jù)目錄

[root@localhost ~]# mysqld --no-defaults --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data3308 --user=mysql --explicit_defaults_for_timestamp

8、將mysql命令加入環(huán)境變量

在/etc/profile最后加入兩行命令:

MYSQL_HOME=/usr/local/mysql

export PATH=$PATH:$MYSQL_HOME/bin

最后執(zhí)行source /etc/profile,使得配置生效

9、創(chuàng)建/etc/my.cnf

[mysqld_multi]

mysqld=/usr/local/mysql/bin/mysqld_safe #mysqld命令的位置,用于啟動(dòng)mysql實(shí)例,也可以指定為mysqld_safe命令的位置

mysqladmin = /usr/local/mysql/bin/mysqladmin #用于停止mysql實(shí)例

user=root #調(diào)用mysqladmin時(shí)使用的賬號(hào)

#password=123456 調(diào)用 mysqladmin時(shí)使用的賬號(hào)的密碼,因?yàn)槲覀兪褂昧薸nitialize-insecure,所以root用戶最開始是沒有密碼的

log=/usr/local/mysql/mysql_multi.log

[mysqld3306]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data3306

port=3306

user=mysql

socket=/tmp/mysql.sock3306

server_id=1

log_bin=mysql-bin #主庫(kù)

[mysqld3307]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data3307

port=3307

user=mysql

socket=/tmp/mysql.sock3307

server_id=2

[mysqld3308]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data3308

port=3308

user=mysql

socket=/tmp/mysql.sock3308

server_id=3

在mysqld_multi中配置的user和password是mysql的用戶名和密碼。為了使用mysqld_multi命令,每個(gè)mysql實(shí)例都必須要提供一個(gè)相同的用戶名和密碼,用于啟動(dòng)和停止服務(wù)。而且要確保這個(gè)用戶具有停止mysql實(shí)例的權(quán)限。提示:

在[mysqlN]中配置的user是linux中的用戶,是啟動(dòng)mysql服務(wù)實(shí)例時(shí)使用的用戶

mysqld_multi提供了start, stop, reload (stop and restart)和report 表示要執(zhí)行的不同操作。可以參見官方文檔查看https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html其完整用法,因?yàn)槊罘浅:?jiǎn)單,這里不做過多介紹。

10、啟動(dòng)MySQL實(shí)例

[root@localhost mysql]# mysqld_multi start

11、查看3個(gè)實(shí)例的運(yùn)行狀態(tài)

[root@localhost mysql]# mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld3306 is running

MySQL server from group: mysqld3307 is running

MySQL server from group: mysqld3308 is running

也可以通過netstat-tln來查看

[root@localhost Desktop]# netstat -tln|grep 330*

tcp 0 0 :::3307 :::* LISTEN

tcp 0 0 :::3308 :::* LISTEN

tcp 0 0 :::3306 :::* LISTEN

12 配置主從關(guān)系

打開3個(gè)命令行窗口,分別執(zhí)行以下命令登錄主從數(shù)據(jù)庫(kù):

mysql -h127.0.0.1 -uroot -P3306 -p

mysql -h127.0.0.1 -uroot -P3307 -p

mysql -h127.0.0.1 -uroot -P3308 -p

因?yàn)槲覀兂跏蓟瘮?shù)據(jù)庫(kù)的時(shí)候,沒有為root用生成密碼,因此出現(xiàn)提示輸入password的時(shí)候,直接按enter鍵就可以了。在這3個(gè)命令行窗口都執(zhí)行以下命令,用于創(chuàng)建復(fù)制賬號(hào):

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'localhost' IDENTIFIED BY 'slave';

理論上,只要再主庫(kù)上創(chuàng)建復(fù)制賬號(hào)即可,但是因?yàn)榭紤]到主備切換的問題,因此在從庫(kù)上也創(chuàng)建復(fù)制賬號(hào)。另外需要注意的是,從庫(kù)從主庫(kù)復(fù)制,本身只需要REPLICATION SLAVE權(quán)限即可,REPLICATION CLIENT權(quán)限是讓這個(gè)用戶擁有執(zhí)行SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是說這個(gè)權(quán)限是用于授予賬戶監(jiān)視Replication狀況的權(quán)力,我們將在之后看到這兩個(gè)命令如何使用。

我們需要在3307和3308上,分別執(zhí)行以下命令,將3306設(shè)置為主庫(kù),這一步是告訴備庫(kù)如何連接到主庫(kù)并重復(fù)其二進(jìn)制日志,舊版本的方式是通過修改my.cnf來配置,但是在新的版本中,修改my.cnf的配置方式已經(jīng)廢棄。而是使用CHANGE MASTER TO 語(yǔ)句,該語(yǔ)句完全替代了my.cnf 中相應(yīng)的設(shè)置,并且允許以后指向別的主庫(kù)時(shí)無(wú)須重啟備庫(kù)。下面是復(fù)制開始的基本命令:

mysql> CHANGE MASTER TO

MASTER_HOST='localhost',

MASTER_USER='slave',

MASTER_PORT=3306,

MASTER_PASSWORD='slave',

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=0;

只需要配置一次即可,之后重啟的時(shí)候,slave會(huì)自動(dòng)連接到master同步數(shù)據(jù),不需要每次都執(zhí)行這些命令。

需要注意的是,此時(shí)復(fù)制并沒有真正的開始,我們可以在主庫(kù)3306上執(zhí)行以下命令,,查看主庫(kù)狀態(tài):

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 154 | | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

mysql> show processlist;

+----+------+-----------------+------+---------+------+----------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+----+------+-----------------+------+---------+------+----------+------------------+

| 3 | root | localhost:58685 | NULL | Query | 0 | starting | show processlist |

+----+------+-----------------+------+---------+------+----------+------------------+

1 row in set (0.00 sec)

在從庫(kù)3307或者3308上,執(zhí)行以下命令:

mysql> show slave statusG;

*************************** 1. row ***************************

Slave_IO_State:

Master_Host: localhost

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 4

Relay_Log_File: localhost-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: No

Slave_SQL_Running: No

Replicate_Do_DB:

Replicate_Ignore_DB:

...omitted....

Seconds_Behind_Master: NULL

...omitted....

1 row in set (0.00 sec)

Slave_IO_State、Slave_IO_Running、Slave_SQL_Running這三列顯示備庫(kù)復(fù)制尚未執(zhí)行。

此時(shí)在從庫(kù)3307和3308上分別執(zhí)行以下命令,開始復(fù)制:

mysql> start slave;

此時(shí)在3307和3308上再執(zhí)行show slave status,可以看到

mysql> show slave statusG;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event #等待主庫(kù)發(fā)送bin-log同步事件

Master_Host: localhost

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 4

Relay_Log_File: localhost-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes #狀態(tài)變?yōu)閅ES

Slave_SQL_Running: Yes #狀態(tài)變?yōu)閅ES

Replicate_Do_DB:

Replicate_Ignore_DB:

...omitted....

Seconds_Behind_Master: NULL

...omitted....

此時(shí)再查看主庫(kù)3306的狀態(tài)

mysql> show processlistG;

*************************** 1. row ***************************

Id: 3

User: root

Host: localhost:58685

db: NULL

Command: Query

Time: 0

State: starting

Info: show processlist

*************************** 2. row ***************************

Id: 4

User: slave

Host: localhost:35312

db: NULL

Command: Binlog Dump

Time: 161

State: Master has sent all binlog to slave; waiting for more updates

Info: NULL

*************************** 3. row ***************************

Id: 5

User: slave

Host: localhost:35313

db: NULL

Command: Binlog Dump

Time: 154

State: Master has sent all binlog to slave; waiting for more updates

Info: NULL

3 rows in set (0.00 sec)

可以看有2個(gè)線程執(zhí)行了Binlog Dump命令,這就是我們的兩個(gè)從庫(kù)已經(jīng)開始復(fù)制。

現(xiàn)在在主庫(kù)3306上創(chuàng)建一個(gè)庫(kù)draon_ha,在其中創(chuàng)建一個(gè)表user,并插入一條記錄,這數(shù)據(jù)都會(huì)自動(dòng)同步到兩個(gè)從庫(kù)中

CREATE DATABASE `dragon_ha`;

use dragon_ha;

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into user(name) values('tianshouzhi');

mysql> show databases;分別在3307和3308兩個(gè)從庫(kù)中執(zhí)行以下命令,查看數(shù)據(jù)是否已經(jīng)同步:

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| dragon_ha |#插入的庫(kù)已經(jīng)同步

| mysql |

| performance_schema |

| sys |

+--------------------+

5 rows in set (0.00 sec)

mysql> use dragon_ha;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+---------------------+

| Tables_in_dragon_ha |

+---------------------+

| user |#插入的表已經(jīng)同步

+---------------------+

1 row in set (0.00 sec)

mysql> select * from user;

+----+-------------+

| id | name |

+----+-------------+

| 1 | tianshouzhi |#插入的記錄已經(jīng)同步

+----+-------------+

1 row in set (0.00 sec)

總結(jié)

以上是生活随笔為你收集整理的mysql multi主从复制_mysqld_multi方式配置Mysql数据库主从复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。