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啟動文件
若系統中無/etc/my.cnf文件,則需要創建[root@localhost?root]#?touch?/etc/my.cnf
[root@localhost?root]#?vim?/etc/my.cnf
添加以下內容[mysql]
default-character-set=utf8
[mysqld]
default-storage-engine=INNODB
character_set_server=utf8
(2)復制mysql.server到/etc/init.d/目錄下(目的想實現開機自動執行效果)[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參數[root@localhost?support-files]#?vim?/etc/init.d/mysql
修改以下內容basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
(4)創建一個操作數據庫的專門用戶(出于安全)建立一個mysql的組
[root@localhost?support-files]#?groupadd?mysql
建立mysql用戶,并且把用戶放到mysql組[root@localhost?support-files]#?useradd?-r?-g?mysql?mysql
為mysql用戶設置密碼[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目錄,則需自行創建
#初始化后會生成一個臨時密碼 root@localhost::*(最好先記錄這個臨時密碼)
給數據庫加密[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 設置遠程訪問
(1)打開mysql的默認端口3306
#設置3306為開放端口[root@localhost?bin]#?firewall-cmd?--zone=public?--add-port=3306/tcp?--permanent
#重新加載防火墻[root@localhost?bin]#?firewall-cmd?--reload
(2)設置mysql的遠程訪問
#設置遠程訪問賬號,若最后加上with grant option,則同時可以賦予權限的權限mysql>?grant?all?privileges?on?*.*?to?root@'%'?identified?by?'密碼';
#刷新
mysql>?flush?privileges;
設置遠程訪問參數說明grant?[previleges]?on?[dbName].[tableName]?to?[userName]@[hostName]?identified?by?"password";
previlege:授予的權限,有select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權限,若all則表示賦予所有權限;
dbName:指定被訪問的數據庫名稱,如果指定所有數據庫可使用*星號;
tableName:指定被訪問的數據表,如果指定某個數據庫下的所有數據表可使用*星號;
userName:遠程主機的登錄用戶名稱;
hostName:遠程主機名或者IP地址,%為所有主機均可登陸;
password:遠程主機用戶訪問MySQL使用的密碼。
7 設置開機自啟動
(1)添加mysql服務[root@localhost?bin]#?chkconfig?--add?mysql
(2)設置mysql服務為自啟動[root@localhost?bin]#?chkconfig?mysql?on
8 配置環境變量[root@localhost?bin]#?vim?/etc/profile
在最后一行加入以下內容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二進制日志,即數據同步語句,從數據庫會一條一條的執行這些語句。
>binlog_do_db?指定記錄二進制日志的數據庫,即需要復制的數據庫名,如果復制多個數據庫,重復設置這個選項即可。
>binlog_ignore_db?指定不記錄二進制日志的數據庫,即不需要復制的數據庫名,如果有多個數據庫,重復設置這個選項即可。
>其中需要注意的是,binlog_do_db和binlog_ignore_db為互斥選項,一般只需要一個即可。
8.2 創建從服務器的用戶和權限
進入mysql數據庫[root@localhost?mysql]#?mysql?-uroot?-p
Enter?password:
#創建從數據庫的masterbackup用戶和權限
mysql>?grant?replication?slave?on?*.*?to?masterbackup@'192.168.1.%'?identified?by?'123456';
#備注
#192.168.1.%通配符,表示0-255的IP都可訪問主服務器,正式環境請配置指定從服務器IP
#若將?192.168.1.%?改為?%,則任何ip均可作為其從數據庫來訪問主服務器
#退出mysql
mysql>?exit;
8.3? 重啟mysql服務[root@localhost?mysql]#?service?mysql?restart
Shutting?down?MySQL....?SUCCESS!
Starting?MySQL.?SUCCESS!
8.4 查看主服務器狀態#進入mysql數據庫
[root@localhost?mysql]#?mysql?-uroot?-p
Enter?password:
查看主服務器狀態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一樣是唯一標識,如果你沒設置server-id或者設置為0,則從服務器不會連接到主服務器。
#relay-log?啟動MySQL二進制日志,可以用來做數據備份和崩潰恢復,或主服務器掛掉了,將此從服務器作為其他從服務器的主服務器。
#replicate-do-db?指定同步的數據庫,如果復制多個數據庫,重復設置這個選項即可。若在master端不指定binlog-do-db,則在slave端可用replication-do-db來過濾。
#replicate-ignore-db?不需要同步的數據庫,如果有多個數據庫,重復設置這個選項即可。
#其中需要注意的是,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數據庫[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數據同步
啟動slave數據同步mysql>?start?slave;
停止slave數據同步(若有需要)mysql>?stop?slave;
9.5 查看slave信息mysql>?show?slave?status\G;
Slave_IO_Running和Slave_SQL_Running都為yes,則表示同步成功。
10 測試
在主服務器上登陸mysql,且進入test數據庫,創建test表,且插入一條數據create?table?test(id?int(11)?AUTO_INCREMENT,?primary?key?comment?'主鍵ID',title?varchar(50)?not?null?comment?'標題');
#插入一條數據
insert?into?test(id,title)?values(null,'我是標題');
在從服務器上登陸mysql,且進入test數據庫
發現數據已經同步;
#11 可能會遇到的錯誤:
若在主從同步的過程中,出現其中一條語句同步失敗報錯了,則后面的語句也肯定不能同步成功了。例如,主庫有一條數據,而從庫并沒有這一條數據,然而,在主庫執行了刪除這一條數據的操作,那么從庫沒有這么一條數據就肯定刪除不了,從而報錯了。在此時的從數據庫的數據同步就失敗了,因此后面的同步語句就無法繼續執行。
#####這里提供的以下幾種方法:
方法一:該方法適用于主從庫數據相差不大,或者要求數據可以不完全統一的情況,數據要求不嚴格的情況
解決:
stop?slave;
#表示跳過一步錯誤,后面的數字可變
set?global?sql_slave_skip_counter?=1;
start?slave;
之后再用mysql>?show?slave?status\G?查看:
Slave_IO_Running:?Yes
Slave_SQL_Running:?Yes
ok,現在主從同步狀態正常了。。。
方式二:指定跳過錯誤代碼,繼續同步主鍵沖突、表已存在等錯誤代碼如1062,1032,1060等,可以在mysql主配置文件指定略過此類異常并繼續下條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
方式三:重新做主從,完全同步
該方法適用于主從庫數據相差較大,或者要求數據完全統一的情況
解決步驟如下:
1.先進入主庫,進行鎖表,防止數據寫入
使用命令:mysql>?flush?tables?with?read?lock;
注意:該處是鎖定為只讀狀態,語句不區分大小寫
2.進行數據備份
把數據備份到mysql.bak.sql文件[root@server01?mysql]#mysqldump?-uroot?-p?-hlocalhost?>?mysql.bak.sql
這里注意一點:數據庫備份一定要定期進行,可以用shell腳本或者python腳本,都比較方便,確保數據萬無一失
3.查看master 狀態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備份文件傳到從庫機器,進行數據恢復#使用scp命令
[root@server01?mysql]#?scp?mysql.bak.sql?root@192.168.1.147:/tmp/
5.停止從庫的狀態mysql>?stop?slave;
6.然后到從庫執行mysql命令,導入數據備份mysql>?source?/tmp/mysql.bak.sql
7.設置從庫同步,注意該處的同步點,就是主庫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.查看同步狀態mysql>?show?slave?status\G?查看:
Slave_IO_Running:?Yes
Slave_SQL_Running:?Yes
一般在線增加從庫有兩種方式,一種是通過mysqldump備份主庫,恢復到從庫,mysqldump是邏輯備份,數據量大時,備份速度會很慢,鎖表的時間也會很長。另一種是通過xtrabackup工具備份主庫,恢復到從庫,xtrabackup是物理備份,備份速度快,不鎖表。為什么不鎖表?因為自身會監控主庫日志,如果有更新的數據,就會先寫到一個文件中,然后再回歸到備份文件中,從而保持數據一致性。
打賞
微信掃一掃,打賞作者吧~
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的centos7部署两个mysql_centos7 安装mysql5.7主从复制主写分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: antv图例出现分页_2020,贴地飞行
- 下一篇: logo下方显示技术支持信息_艺术与实用