久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux下的MYSQL主主復制的用法

156次閱讀
沒有評論

共計 9833 個字符,預計需要花費 25 分鐘才能閱讀完成。

這篇文章主要講解了“Linux 下的 MYSQL 主主復制的用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“Linux 下的 MYSQL 主主復制的用法”吧!

為什么,會有 mysql 的主主復制。因為在一些高可用的環境中,mysql 的主從不能滿足現實中的一些實際需求。比如,一些流量大的網站數據庫訪問有了瓶頸,需要負載均衡的時候就用兩個或者多個的 mysql 服務器,而這些 mysql 服務器的數據庫數據必須要保持一致,那么就會用到主主復制。

mysql 主從架構中其實就一個主在工作,而從就相當于一個備份機器,從通過日志監測的方式來備份主庫上的數據而保證主庫的數據安全。在這種架構中如果從上的數據做了改變,主數據是不會用任何變化的。因為 mysql 主從架構主要是 mysql 從監控 mysql 主的日志變化來實現同步,相反的在這個架構中主并沒有監控從的日志變化。所以,mysql 從數據反生變化,主也就沒有什么變化了。

通過上述描述,可以看到如果想實現主主復制,無非就是在 mysql 主從架構上讓 mysql 主實現監測從的日志變化,從而實現兩臺機器相互同步。(主從的架構前面有博文 http://duyunlong.blog.51cto.com/1054716/1102237)

實驗環境:兩臺服務器:

主機名:HA1,HA2(呵呵, 這個主機名是英文縮寫 High availability,高可用的意思)

ip:192.168.1.231

192.168.1.232

主機系統:centos6.4

mysql 版本 5.5.22

首先,看下 HA1(192.168.1.231)的 mysql 配置文件

vim /etc/my.cnf# Example MySQL config file for very large systems.## This is for a large system with memory of 1G-2G where the system runs mainly# MySQL.## MySQL programs look for option files in a set of# locations which depend on the deployment platform.# You can copy this option file to one of those# locations. For information about these locations, see:# http://dev.mysql.com/doc/mysql/en/option-files.html## In this file, you can use all long options that a program supports.# If you want to know which options a program supports, run the program# with the  --help  option.# The following options will be passed to all MySQL clients[client]#password = your_passwordport = 3306socket = /usr/local/mysql/tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server[mysqld]port = 3306socket = /usr/local/mysql/tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8query_cache_size = 32M# Try number of CPU s*2 for thread_concurrencythread_concurrency = 8# Don t listen on a TCP/IP port at all. This can be a security enhancement,# if all processes that need to connect to mysqld run on the same host.# All interaction with mysqld must be made via Unix sockets or named pipes.# Note that using this option without enabling named pipes on Windows# (via the  enable-named-pipe  option) will render mysqld useless!##skip-networking# Replication Master Server (default)# binary logging is required for replicationlog-bin=mysql-binlog-slave-updates# required unique id between 1 and 2^32 - 1# defaults to 1 if master-host is not set# but will not function as a master if omittedserver-id = 1

在這個配置文件中,需要特別注意的三處地方:

log-bin=mysql-bin:這個選項基本默認都是開著的,如果沒有打開,可以手動打開。

log-slave-updates:這個選項特別的重要它是為了讓 slave 也能充當 master,同時也為了更好的服務于 m-m + s 的環境,保證 slave 掛在任何一臺 master 上都會接收到另一個 master 的寫入信息。當然不局限于這個架構,級聯復制的架構同樣也需要 log-slave-updates 的支持。

server-id = 1:這個 ID 為服務器 ID 如果配置一樣會出現沖突,而不能復制

接著再看下 HA2(192.168.1.232)的 mysql 配置文件

vim /etc/my.cnf# Example MySQL config file for very large systems.## This is for a large system with memory of 1G-2G where the system runs mainly# MySQL.## MySQL programs look for option files in a set of# locations which depend on the deployment platform.# You can copy this option file to one of those# locations. For information about these locations, see:# http://dev.mysql.com/doc/mysql/en/option-files.html## In this file, you can use all long options that a program supports.# If you want to know which options a program supports, run the program# with the  --help  option.# The following options will be passed to all MySQL clients[client]#password = your_passwordport = 3306socket = /usr/local/mysql/tmp/mysql.sock# Here follows entries for some specific programs# The MySQL server[mysqld]port = 3306socket = /usr/local/mysql/tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8query_cache_size = 32M# Try number of CPU s*2 for thread_concurrencythread_concurrency = 8# Don t listen on a TCP/IP port at all. This can be a security enhancement,# if all processes that need to connect to mysqld run on the same host.# All interaction with mysqld must be made via Unix sockets or named pipes.# Note that using this option without enabling named pipes on Windows# (via the  enable-named-pipe  option) will render mysqld useless!##skip-networking# Replication Master Server (default)# binary logging is required for replicationlog-bin=mysql-binlog-slave-updates# required unique id between 1 and 2^32 - 1# defaults to 1 if master-host is not set# but will not function as a master if omittedserver-id = 10# Replication Slave (comment out master section to use this)

在 HA2 的 mysql 配置文件中,除了 server-id 不一樣,其他幾乎一模一樣。配置文件寫好后,我們把兩臺服務器上的 mysql 服務器啟動起來。

首先,登錄 HA2(192.168.1.232)的 mysql 中,查看 master 狀態

mysql  show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000016 | 615 | | |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql

然后,登錄 HA1(192.168.1.231)的 msyql 中,把 HA2 配置成自己的主,在做這個之前先在兩臺機器的 mysql 中建立一個可以復制用的帳號:

mysql grant all on *.* to duyunlong@ 192.168.1.%  identified by  123456 
Query OK, 0 rows affected (0.01 sec)
mysql change master to master_host= 192.168.1.232 ,master_user= duyunlong ,master_password= 123456 ,master_log_file= mysql-bin.000016 ,master_log_pos=615;

同上,查看 HA1(192.168.1.231)master,然后登錄 HA2(192.168.1.232), 把 HA1(192.168.1.231),配置成自己的主,然后分別在兩臺機器的 mysql 中,啟動 slave

啟動后 HA1 狀態

mysql  show slave status \G;*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 192.168.1.232
 Master_User: duyunlong
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: mysql-bin.000016
 Read_Master_Log_Pos: 615
 Relay_Log_File: HA1-relay-bin.000002
 Relay_Log_Pos: 346
 Relay_Master_Log_File: mysql-bin.000016
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 Replicate_Do_DB:
 Replicate_Ignore_DB:
 Replicate_Do_Table:
 Replicate_Ignore_Table:
 Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
 Last_Errno: 0
 Last_Error:
 Skip_Counter: 0
 Exec_Master_Log_Pos: 615
 Relay_Log_Space: 500
 Until_Condition: None
 Until_Log_File:
 Until_Log_Pos: 0
 Master_SSL_Allowed: No
 Master_SSL_CA_File:
 Master_SSL_CA_Path:
 Master_SSL_Cert:
 Master_SSL_Cipher:
 Master_SSL_Key:
 Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No
 Last_IO_Errno: 0
 Last_IO_Error:
 Last_SQL_Errno: 0
 Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
 Master_Server_Id: 101 row in set (0.00 sec)ERROR:No query specified

可以看到  Slave_IO_Running: Yes
Slave_SQL_Running: Yes

然后在看 HA2 的狀態:

mysql  show slave status \G;*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 192.168.1.231
 Master_User: duyunlong
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: mysql-bin.000018
 Read_Master_Log_Pos: 552
 Relay_Log_File: HA2-relay-bin.000002
 Relay_Log_Pos: 441
 Relay_Master_Log_File: mysql-bin.000018
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 Replicate_Do_DB:
 Replicate_Ignore_DB:
 Replicate_Do_Table:
 Replicate_Ignore_Table:
 Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
 Last_Errno: 0
 Last_Error:
 Skip_Counter: 0
 Exec_Master_Log_Pos: 552
 Relay_Log_Space: 595
 Until_Condition: None
 Until_Log_File:
 Until_Log_Pos: 0
 Master_SSL_Allowed: No
 Master_SSL_CA_File:
 Master_SSL_CA_Path:
 Master_SSL_Cert:
 Master_SSL_Cipher:
 Master_SSL_Key:
 Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No
 Last_IO_Errno: 0
 Last_IO_Error:
 Last_SQL_Errno: 0
 Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
 Master_Server_Id: 11 row in set (0.00 sec)ERROR:No query specified

可以看到 Slave_IO_Running: Yes
Slave_SQL_Running: Yes

接下來,我們要測試,是不是已經可以主主復制了呢,首先登錄 HA1(192.168.1.231) 的 mysql 中,建立一數據庫,當然在測試前我們先看下,兩臺服務器中的 mysql 中有哪些數據

首先看下 HA1(192.168.1.231)

[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.231 -e  show databases; +--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test || wanghaipeng |+--------------------+[root@HA1 ~]#

再看下 HA2(192.168.1.232)

[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.232 -e  show databases; +--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test || wanghaipeng |+--------------------+[root@HA2 ~]#

可以看到,現在兩臺服務器上的 mysql 中數據是一樣的,接下來在 HA 中建立一數據庫“a”, 再看結果

[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.231 -e  create database a; [root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.231 -e  show databases; +--------------------+| Database |+--------------------+| information_schema || a || mysql || performance_schema || test || wanghaipeng |+--------------------+[root@HA1 ~]#

然后看下 HA2(192.168.1.232)是不是會把剛建立的數據庫“a”復制過來

[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.232 -e  show databases; +--------------------+| Database |+--------------------+| information_schema || a || mysql || performance_schema || test || wanghaipeng |+--------------------+

可以看到,數據庫“a”已經成功復制過來了,反過來我們在 HA2(192.168.1.232)上建立一數據庫“b”看是否 HA1 也可以復制過去

[root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.232 -e  create database b; [root@HA2 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.232 -e  show databases; +--------------------+| Database |+--------------------+| information_schema || a || b || mysql || performance_schema || test || wanghaipeng |+--------------------+[root@HA2 ~]#

然后登錄 HA1(192.168.1.231),查看是否復制成功

[root@HA1 ~]# mysql mysql -uduyunlong -p123456 -h292.168.1.231 -e  show databases; +--------------------+| Database |+--------------------+| information_schema || a || b || mysql || performance_schema || test || wanghaipeng |+--------------------+[root@HA1 ~]#

在 HA1(192.168.1.231)可以看到數據庫“b”已經復制過來了。

那么到此,主主復制架構已經成功!

感謝各位的閱讀,以上就是“Linux 下的 MYSQL 主主復制的用法”的內容了,經過本文的學習后,相信大家對 Linux 下的 MYSQL 主主復制的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計9833字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 武乡县| 万载县| 莱芜市| 玉田县| 孙吴县| 孝义市| 太原市| 常宁市| 南丹县| 双柏县| 新津县| 东乡| 察雅县| 库伦旗| 高碑店市| 白银市| 融水| 梨树县| 兴山县| 九龙坡区| 凤阳县| 思南县| 微博| 顺平县| 龙海市| 襄樊市| 沐川县| 汝阳县| 景谷| 万盛区| 凤山县| 莱州市| 平武县| 微博| 乐业县| 丰城市| 博白县| 疏勒县| 章丘市| 裕民县| 孝感市|