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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

centos7部署两个mysql_centos7 安装mysql5.7主从复制主写分离

發(fā)布時間:2025/4/16 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 centos7部署两个mysql_centos7 安装mysql5.7主从复制主写分离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

centos7 兩臺

master IP:192.168.1.146

slave? IP:192.168.1.147

1 下載mysql

下載后把安裝包上傳到服務器,也可以直接在服務器上用wget下載。

2 解壓文件#解壓文件[root@localhost?root]#?tar?-xzvf?mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

#將解壓后的文件名改名為mysql,并移至/usr/local/目錄下

[root@localhost?root]#?mv?mysql-5.7.23-linux-glibc2.12-x86_64?/usr/local/mysql

3 配置文件

(1)配置mysql啟動文件

若系統(tǒng)中無/etc/my.cnf文件,則需要創(chuàng)建[root@localhost?root]#?touch?/etc/my.cnf

[root@localhost?root]#?vim?/etc/my.cnf

添加以下內(nèi)容[mysql]

default-character-set=utf8

[mysqld]

default-storage-engine=INNODB

character_set_server=utf8

(2)復制mysql.server到/etc/init.d/目錄下(目的想實現(xiàn)開機自動執(zhí)行效果)[root@localhost?root]#?cd?/usr/local/mysql/support-files/

[root@localhost?support-files]#?cp?mysql.server?/etc/init.d/mysql

(3)修改/etc/init.d/mysql參數(shù)[root@localhost?support-files]#?vim?/etc/init.d/mysql

修改以下內(nèi)容basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

(4)創(chuàng)建一個操作數(shù)據(jù)庫的專門用戶(出于安全)建立一個mysql的組

[root@localhost?support-files]#?groupadd?mysql

建立mysql用戶,并且把用戶放到mysql組[root@localhost?support-files]#?useradd?-r?-g?mysql?mysql

為mysql用戶設(shè)置密碼[root@localhost?support-files]#?passwd?mysql

給目錄/usr/local/mysql 更改擁有者[root@localhost?support-files]#?chown?-R?mysql:mysql?/usr/local/mysql/

4 安裝初始化mysql[root@localhost?support-files]#?cd?/usr/local/mysql/bin/

[root@localhost?bin]#?./mysqld?--initialize?--user=mysql?--basedir=/usr/local/mysql/?--datadir=/usr/local/mysql/data

#注意:若報libaio錯,則yum install -y libaio

#注意:若報無/usr/local/mysql/data目錄,則需自行創(chuàng)建

#初始化后會生成一個臨時密碼 root@localhost::*(最好先記錄這個臨時密碼)

給數(shù)據(jù)庫加密[root@localhost?bin]#?./mysql_ssl_rsa_setup?--datadir=/usr/local/mysql/data/

啟動mysql

#啟動mysql,如果mysqld進程異常終止,mysqld_safe將自動重啟mysqld[root@localhost?bin]#?./mysqld_safe?--user=mysql?&

#檢查mysql是否啟動[root@localhost?bin]#?ps?-ef|grep?mysql

#5 修改密碼

#進入客戶端[root@localhost?bin]#?./mysql?-uroot?-p

Enter?password:這里輸入之前的臨時密碼

#修改密碼

mysql>?set?password=password('新密碼');

#6 設(shè)置遠程訪問

(1)打開mysql的默認端口3306

#設(shè)置3306為開放端口[root@localhost?bin]#?firewall-cmd?--zone=public?--add-port=3306/tcp?--permanent

#重新加載防火墻[root@localhost?bin]#?firewall-cmd?--reload

(2)設(shè)置mysql的遠程訪問

#設(shè)置遠程訪問賬號,若最后加上with grant option,則同時可以賦予權(quán)限的權(quán)限mysql>?grant?all?privileges?on?*.*?to?root@'%'?identified?by?'密碼';

#刷新

mysql>?flush?privileges;

設(shè)置遠程訪問參數(shù)說明grant?[previleges]?on?[dbName].[tableName]?to?[userName]@[hostName]?identified?by?"password";

previlege:授予的權(quán)限,有select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權(quán)限,若all則表示賦予所有權(quán)限;

dbName:指定被訪問的數(shù)據(jù)庫名稱,如果指定所有數(shù)據(jù)庫可使用*星號;

tableName:指定被訪問的數(shù)據(jù)表,如果指定某個數(shù)據(jù)庫下的所有數(shù)據(jù)表可使用*星號;

userName:遠程主機的登錄用戶名稱;

hostName:遠程主機名或者IP地址,%為所有主機均可登陸;

password:遠程主機用戶訪問MySQL使用的密碼。

7 設(shè)置開機自啟動

(1)添加mysql服務[root@localhost?bin]#?chkconfig?--add?mysql

(2)設(shè)置mysql服務為自啟動[root@localhost?bin]#?chkconfig?mysql?on

8 配置環(huán)境變量[root@localhost?bin]#?vim?/etc/profile

在最后一行加入以下內(nèi)容export?PATH=/usr/local/mysql/bin:$PATH

使修改生效[root@localhost?bin]#?source?/etc/profile

至此,mysql5.7在linux的安裝則完成啦!!

mysql 主從復制配置

8 master主服務器的配置

8.1 配置文件my.cnf的修改[root@localhost?mysql]#?vim?/etc/my.cnf

在[mysqld]中添加:

server-id=1

log_bin=master-bin

log_bin_index=master-bin.index

binlog_do_db=test

>備注:

>server-id?服務器唯一標識。

>log_bin?啟動MySQL二進制日志,即數(shù)據(jù)同步語句,從數(shù)據(jù)庫會一條一條的執(zhí)行這些語句。

>binlog_do_db?指定記錄二進制日志的數(shù)據(jù)庫,即需要復制的數(shù)據(jù)庫名,如果復制多個數(shù)據(jù)庫,重復設(shè)置這個選項即可。

>binlog_ignore_db?指定不記錄二進制日志的數(shù)據(jù)庫,即不需要復制的數(shù)據(jù)庫名,如果有多個數(shù)據(jù)庫,重復設(shè)置這個選項即可。

>其中需要注意的是,binlog_do_db和binlog_ignore_db為互斥選項,一般只需要一個即可。

8.2 創(chuàng)建從服務器的用戶和權(quán)限

進入mysql數(shù)據(jù)庫[root@localhost?mysql]#?mysql?-uroot?-p

Enter?password:

#創(chuàng)建從數(shù)據(jù)庫的masterbackup用戶和權(quán)限

mysql>?grant?replication?slave?on?*.*?to?masterbackup@'192.168.1.%'?identified?by?'123456';

#備注

#192.168.1.%通配符,表示0-255的IP都可訪問主服務器,正式環(huán)境請配置指定從服務器IP

#若將?192.168.1.%?改為?%,則任何ip均可作為其從數(shù)據(jù)庫來訪問主服務器

#退出mysql

mysql>?exit;

8.3? 重啟mysql服務[root@localhost?mysql]#?service?mysql?restart

Shutting?down?MySQL....?SUCCESS!

Starting?MySQL.?SUCCESS!

8.4 查看主服務器狀態(tài)#進入mysql數(shù)據(jù)庫

[root@localhost?mysql]#?mysql?-uroot?-p

Enter?password:

查看主服務器狀態(tài)mysql>?show?master?status;

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

|?File?|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|?Executed_Gtid_Set?|

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

|?master-bin.000001?|?154?|?test?|?|?|

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

1?row?in?set?(0.00?sec)

9 slave從服務器的配置

9.1 配置文件my.cnf的修改

編輯my.cnf文件[root@localhost?mysql]#?vim?/etc/my.cnf

#在[mysqld]中添加:

server-id=2

relay-log=slave-relay-bin

relay-log-index=slave-relay-bin.index

#replicate-do-db=test

#備注:

#server-id?服務器唯一標識,如果有多個從服務器,每個服務器的server-id不能重復,跟IP一樣是唯一標識,如果你沒設(shè)置server-id或者設(shè)置為0,則從服務器不會連接到主服務器。

#relay-log?啟動MySQL二進制日志,可以用來做數(shù)據(jù)備份和崩潰恢復,或主服務器掛掉了,將此從服務器作為其他從服務器的主服務器。

#replicate-do-db?指定同步的數(shù)據(jù)庫,如果復制多個數(shù)據(jù)庫,重復設(shè)置這個選項即可。若在master端不指定binlog-do-db,則在slave端可用replication-do-db來過濾。

#replicate-ignore-db?不需要同步的數(shù)據(jù)庫,如果有多個數(shù)據(jù)庫,重復設(shè)置這個選項即可。

#其中需要注意的是,replicate-do-db和replicate-ignore-db為互斥選項,一般只需要一個即可。

9.2 重啟mysql服務[root@localhost?mysql]#?service?mysql?restart

Shutting?down?MySQL....?SUCCESS!

Starting?MySQL.?SUCCESS!

9.3 連接master主服務器

進入mysql數(shù)據(jù)庫[root@localhost?mysql]#?mysql?-uroot?-p

Enter?password:

連接master主服務器mysql>?change?master?to?master_host='192.168.1.146',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=154;

#備注:

#master_host對應主服務器的IP地址。

#master_port對應主服務器的端口。

#master_log_file對應show?master?status顯示的File列:master-bin.000001。

#master_log_pos對應show?master?status顯示的Position列:154。

9.4 啟動slave數(shù)據(jù)同步

啟動slave數(shù)據(jù)同步mysql>?start?slave;

停止slave數(shù)據(jù)同步(若有需要)mysql>?stop?slave;

9.5 查看slave信息mysql>?show?slave?status\G;

Slave_IO_Running和Slave_SQL_Running都為yes,則表示同步成功。

10 測試

在主服務器上登陸mysql,且進入test數(shù)據(jù)庫,創(chuàng)建test表,且插入一條數(shù)據(jù)create?table?test(id?int(11)?AUTO_INCREMENT,?primary?key?comment?'主鍵ID',title?varchar(50)?not?null?comment?'標題');

#插入一條數(shù)據(jù)

insert?into?test(id,title)?values(null,'我是標題');

在從服務器上登陸mysql,且進入test數(shù)據(jù)庫

發(fā)現(xiàn)數(shù)據(jù)已經(jīng)同步;

#11 可能會遇到的錯誤:

若在主從同步的過程中,出現(xiàn)其中一條語句同步失敗報錯了,則后面的語句也肯定不能同步成功了。例如,主庫有一條數(shù)據(jù),而從庫并沒有這一條數(shù)據(jù),然而,在主庫執(zhí)行了刪除這一條數(shù)據(jù)的操作,那么從庫沒有這么一條數(shù)據(jù)就肯定刪除不了,從而報錯了。在此時的從數(shù)據(jù)庫的數(shù)據(jù)同步就失敗了,因此后面的同步語句就無法繼續(xù)執(zhí)行。

#####這里提供的以下幾種方法:

方法一:該方法適用于主從庫數(shù)據(jù)相差不大,或者要求數(shù)據(jù)可以不完全統(tǒng)一的情況,數(shù)據(jù)要求不嚴格的情況

解決:

stop?slave;

#表示跳過一步錯誤,后面的數(shù)字可變

set?global?sql_slave_skip_counter?=1;

start?slave;

之后再用mysql>?show?slave?status\G?查看:

Slave_IO_Running:?Yes

Slave_SQL_Running:?Yes

ok,現(xiàn)在主從同步狀態(tài)正常了。。。

方式二:指定跳過錯誤代碼,繼續(xù)同步主鍵沖突、表已存在等錯誤代碼如1062,1032,1060等,可以在mysql主配置文件指定略過此類異常并繼續(xù)下條sql同步,這樣也可以避免很多主從同步的異常中斷

[mysqld]

slave-skip-errors?=?1062,1032,1060

重新啟動mysql

service?mysqld?restart

之后再用mysql>?show?slave?status\G?查看:

Slave_IO_Running:?Yes

Slave_SQL_Running:?Yes

方式三:重新做主從,完全同步

該方法適用于主從庫數(shù)據(jù)相差較大,或者要求數(shù)據(jù)完全統(tǒng)一的情況

解決步驟如下:

1.先進入主庫,進行鎖表,防止數(shù)據(jù)寫入

使用命令:mysql>?flush?tables?with?read?lock;

注意:該處是鎖定為只讀狀態(tài),語句不區(qū)分大小寫

2.進行數(shù)據(jù)備份

把數(shù)據(jù)備份到mysql.bak.sql文件[root@server01?mysql]#mysqldump?-uroot?-p?-hlocalhost?>?mysql.bak.sql

這里注意一點:數(shù)據(jù)庫備份一定要定期進行,可以用shell腳本或者python腳本,都比較方便,確保數(shù)據(jù)萬無一失

3.查看master 狀態(tài)mysql>?show?master?status;

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

|?File?|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|

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

|?mysqld-bin.000001?|?3260?|?|?mysql,test,information_schema?|

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

1?row?in?set?(0.00?sec)

4.把mysql備份文件傳到從庫機器,進行數(shù)據(jù)恢復#使用scp命令

[root@server01?mysql]#?scp?mysql.bak.sql?root@192.168.1.147:/tmp/

5.停止從庫的狀態(tài)mysql>?stop?slave;

6.然后到從庫執(zhí)行mysql命令,導入數(shù)據(jù)備份mysql>?source?/tmp/mysql.bak.sql

7.設(shè)置從庫同步,注意該處的同步點,就是主庫show master status信息里的| File| Position兩項change?master?to?master_host?=?'192.168.1.146',?master_user?=?'rsync',?master_port=3306,?master_password='',?master_log_file?=?'mysqld-bin.000001',?master_log_pos=3260;

8.重新開啟從同步mysql>?stop?slave;

9.查看同步狀態(tài)mysql>?show?slave?status\G?查看:

Slave_IO_Running:?Yes

Slave_SQL_Running:?Yes

一般在線增加從庫有兩種方式,一種是通過mysqldump備份主庫,恢復到從庫,mysqldump是邏輯備份,數(shù)據(jù)量大時,備份速度會很慢,鎖表的時間也會很長。另一種是通過xtrabackup工具備份主庫,恢復到從庫,xtrabackup是物理備份,備份速度快,不鎖表。為什么不鎖表?因為自身會監(jiān)控主庫日志,如果有更新的數(shù)據(jù),就會先寫到一個文件中,然后再回歸到備份文件中,從而保持數(shù)據(jù)一致性。

打賞

微信掃一掃,打賞作者吧~

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的centos7部署两个mysql_centos7 安装mysql5.7主从复制主写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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