centos7部署两个mysql_centos7 安装mysql5.7主从复制主写分离
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: antv图例出现分页_2020,贴地飞行
- 下一篇: logo下方显示技术支持信息_艺术与实用