Linux下配置MySQL主從複製
MySQL的主從複製是自己一直想學習的一個實戰經歷,因為Oracle中的主從複製也是需要不少的配置選項,相比來說感覺重量級一些(資料量也重量級).
今天試了一下,在本地的一臺Linux虛擬機器上簡單模擬了一把,發現還是蠻有趣的。因為也是外行,所以為了快速達到效果,自己看了一個很早的影片,結果實際操作的時候,有好幾個配置引數都已經沒有了。看來還是需要靜下心來慢慢做,在Windows上配置了一下,因為各種各樣的原因,就是沒有配置出來,個人還是喜歡Linux環境下弄,今天加了把勁總算有點苗頭了。
大體的步驟有幾個,
建立兩個作業系統使用者,加入dba組。
在master庫所在使用者上安裝MySQL
在slave庫所在的使用者上安裝MySQL
配置主從複製關係
啟動slave檢查
首先來看看原理圖,估計這個圖都被共享得無處不在了。可以從圖中看到主從複製的基本原理就是使用binlog來完成的。這個binlog(二進位制日誌)可以很靈活地解析出對應的sql語句來,基本上就是在slave端做一個類似回放的工作了。不過這個過程相對持續時間很短,資料量小,事務小的情況下,完全感覺不到延時。
我們來看看怎麼做吧。因為使用MySQL自己想盡量不取預設值,就沒有選擇rpm包安裝和yum安裝等方式,直接從網站上得到了Lib包。直接解壓就能執行的。
對於預設的埠3306自己就指定為1550,日誌路徑等配置都是透過手動完成,也算能夠感受到MySQL在後臺處理的時候那些是必要的。
安裝的過程很容易。
在glibc多的解壓檔案的路徑,我配置了一個MYSQL_BASE的變數,透過手工命令來安裝。
[mysql@oel1 mysql-advanced-5.6.23-linux-glibc2.5-i686]$ ll
total 288
-rw-r--r-- 1 mysql dba 120908 Apr 7 16:11 a.log
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:41 bin
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:41 docs
drwxr-xr-x 3 mysql dba 4096 Apr 5 15:41 include
-rw-r--r-- 1 mysql dba 102509 Jan 29 21:11 INSTALL-BINARY
drwxr-xr-x 3 mysql dba 4096 Apr 5 15:42 lib
-rw-r--r-- 1 mysql dba 2729 Jan 29 21:11 LICENSE.mysql
drwxr-xr-x 4 mysql dba 4096 Apr 5 15:41 man
-rw-r--r-- 1 mysql dba 1029 Apr 5 15:49 my.cnf
-rw-r--r-- 1 mysql dba 1029 Apr 14 18:56 my-new.cnf
drwxr-xr-x 10 mysql dba 4096 Apr 5 15:41 mysql-test
-rw-r--r-- 1 mysql dba 1449 Jan 29 21:11 README
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:41 scripts
drwxr-xr-x 28 mysql dba 4096 Apr 5 15:42 share
drwxr-xr-x 4 mysql dba 4096 Apr 5 15:41 sql-bench
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:45 support-files
配置的profile變數如下:
PATH=$PATH:$HOME/bin
export MYSQL_BASE=/u02/mysql/mysql-advanced-5.6.23-linux-glibc2.5-i686
export MYSQL_DATA=/u02/mysql/data
export PATH=$PATH:$MYSQL_BASE/bin:$MYSQL_DATA
然後執行命令安裝,其實也就是初始化工作了,指定的埠是1550
$MYSQL_BASE/scripts/mysql_install_db --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1550
然後我們啟動mysql就可以了。啟動的命令相對選項要多一些,我們不適用.cnf檔案來配置了,純手工方式來看看。
$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1550 --log-bin=mysql_oel1_bin --log-error=/u02/mysql/log/log_error.log --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysql/log/slow_qeury.log --socket=/u02/mysql/mysqld_mst.sock --server-id=1 &
這樣在master端就搞定了。
slave端的工作也是類似,或者如果偷懶自己也可以直接把解壓包複製過去。如果安裝初始化的時候就需要重新制定埠了,我們定位1551吧。
先不配置slave,看能不能啟動。
$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1551 --log-bin=mysql_oel1_slv1_bin --log-error=/u02/mysqlslv1/log/log_error.log --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysqlslv1/log/slow_qeury.log --socket=/u02/mysqlslv1/mysql_slv1.sock
啟動之後,驗證無誤,我們就可以開始配置了。
主從配置相對來說還是很簡單的,如果過多的規則要求,還是很容易的。
在主庫我們需要配置一個使用者作為複製所用。
mysql> grant replication slave on *.* to 'slaveuser'@'192.168.27.130' identified by 'slaveuser';
Query OK, 0 rows affected (0.00 sec)
這個新建使用者在user中就有所體現了。
mysql> select host,user,password from user;
+----------------+-----------+-------------------------------------------+
| host | user | password |
+----------------+-----------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| oel1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | |
| ::1 | root | |
| % | test | |
| 192.168.27.130 | slaveuser | *7890E850D4C4DF85267DEC80307D6CCAEC115B2F |
+----------------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)
檢視master的情況
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mysql_oel1_bin.000004 | 520 | | | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
然後到slave端,重新啟動一下,配置一下server-id我們設定為2,指定埠為1551
$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1551 --log-bin=mysql_oel1_slv1_bin --log-error=/u02/mysqlslv1/log/log_error.log --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysqlslv1/log/slow_qeury.log --socket=/u02/mysqlslv1/mysql_slv1.sock --server-id=2 &
啟動完成之後,執行下面的語句來在slave端配置就可以了,這個過程就如同一個db link的感覺。
mysql> change master to master_host='192.168.27.130', master_user='slaveuser', master_password='slaveuser',master_port=1550;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
啟動之後。直接檢視show slave status \G就能看到slave端的一個基本情況了。很可能由於操作原因,出現一些複製的問題,我們可以指定skip的範圍,下面這樣操作。
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL sql_slave_skip_counter =100;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.27.130
Master_User: slaveuser
Master_Port: 1550
Connect_Retry: 60
Master_Log_File: mysql_oel1_bin.000005
Read_Master_Log_Pos: 436
Relay_Log_File: oel1-relay-bin.000010
Relay_Log_Pos: 288
Relay_Master_Log_File: mysql_oel1_bin.000005
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: 98
Exec_Master_Log_Pos: 436
Relay_Log_Space: 628
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: 0
Master_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: 1
Master_UUID: 02c8b5e4-e295-11e4-8db2-000c296415de
Master_Info_File: /u02/mysqlslv1/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
然後我們在master端刪除一個表new,可以從slave端看不到這個表了。
建立之前,slave中的表
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| innodb_test |
| myisam_test |
| new |
| new_test |
| test3 |
| test4 |
+----------------+
6 rows in set (0.00 sec)
建立之後,馬上檢視,很快就同步了。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| innodb_test |
| myisam_test |
| new_test |
| test3 |
| test4 |
+----------------+
5 rows in set (0.00 sec)
然後依次類推,很輕鬆就在十多分鐘內又弄了一套slave環境。總體感覺就是輕巧和簡便。
今天試了一下,在本地的一臺Linux虛擬機器上簡單模擬了一把,發現還是蠻有趣的。因為也是外行,所以為了快速達到效果,自己看了一個很早的影片,結果實際操作的時候,有好幾個配置引數都已經沒有了。看來還是需要靜下心來慢慢做,在Windows上配置了一下,因為各種各樣的原因,就是沒有配置出來,個人還是喜歡Linux環境下弄,今天加了把勁總算有點苗頭了。
大體的步驟有幾個,
建立兩個作業系統使用者,加入dba組。
在master庫所在使用者上安裝MySQL
在slave庫所在的使用者上安裝MySQL
配置主從複製關係
啟動slave檢查
首先來看看原理圖,估計這個圖都被共享得無處不在了。可以從圖中看到主從複製的基本原理就是使用binlog來完成的。這個binlog(二進位制日誌)可以很靈活地解析出對應的sql語句來,基本上就是在slave端做一個類似回放的工作了。不過這個過程相對持續時間很短,資料量小,事務小的情況下,完全感覺不到延時。
我們來看看怎麼做吧。因為使用MySQL自己想盡量不取預設值,就沒有選擇rpm包安裝和yum安裝等方式,直接從網站上得到了Lib包。直接解壓就能執行的。
對於預設的埠3306自己就指定為1550,日誌路徑等配置都是透過手動完成,也算能夠感受到MySQL在後臺處理的時候那些是必要的。
安裝的過程很容易。
在glibc多的解壓檔案的路徑,我配置了一個MYSQL_BASE的變數,透過手工命令來安裝。
[mysql@oel1 mysql-advanced-5.6.23-linux-glibc2.5-i686]$ ll
total 288
-rw-r--r-- 1 mysql dba 120908 Apr 7 16:11 a.log
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:41 bin
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:41 docs
drwxr-xr-x 3 mysql dba 4096 Apr 5 15:41 include
-rw-r--r-- 1 mysql dba 102509 Jan 29 21:11 INSTALL-BINARY
drwxr-xr-x 3 mysql dba 4096 Apr 5 15:42 lib
-rw-r--r-- 1 mysql dba 2729 Jan 29 21:11 LICENSE.mysql
drwxr-xr-x 4 mysql dba 4096 Apr 5 15:41 man
-rw-r--r-- 1 mysql dba 1029 Apr 5 15:49 my.cnf
-rw-r--r-- 1 mysql dba 1029 Apr 14 18:56 my-new.cnf
drwxr-xr-x 10 mysql dba 4096 Apr 5 15:41 mysql-test
-rw-r--r-- 1 mysql dba 1449 Jan 29 21:11 README
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:41 scripts
drwxr-xr-x 28 mysql dba 4096 Apr 5 15:42 share
drwxr-xr-x 4 mysql dba 4096 Apr 5 15:41 sql-bench
drwxr-xr-x 2 mysql dba 4096 Apr 5 15:45 support-files
配置的profile變數如下:
PATH=$PATH:$HOME/bin
export MYSQL_BASE=/u02/mysql/mysql-advanced-5.6.23-linux-glibc2.5-i686
export MYSQL_DATA=/u02/mysql/data
export PATH=$PATH:$MYSQL_BASE/bin:$MYSQL_DATA
然後執行命令安裝,其實也就是初始化工作了,指定的埠是1550
$MYSQL_BASE/scripts/mysql_install_db --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1550
然後我們啟動mysql就可以了。啟動的命令相對選項要多一些,我們不適用.cnf檔案來配置了,純手工方式來看看。
$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1550 --log-bin=mysql_oel1_bin --log-error=/u02/mysql/log/log_error.log --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysql/log/slow_qeury.log --socket=/u02/mysql/mysqld_mst.sock --server-id=1 &
這樣在master端就搞定了。
slave端的工作也是類似,或者如果偷懶自己也可以直接把解壓包複製過去。如果安裝初始化的時候就需要重新制定埠了,我們定位1551吧。
先不配置slave,看能不能啟動。
$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1551 --log-bin=mysql_oel1_slv1_bin --log-error=/u02/mysqlslv1/log/log_error.log --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysqlslv1/log/slow_qeury.log --socket=/u02/mysqlslv1/mysql_slv1.sock
啟動之後,驗證無誤,我們就可以開始配置了。
主從配置相對來說還是很簡單的,如果過多的規則要求,還是很容易的。
在主庫我們需要配置一個使用者作為複製所用。
mysql> grant replication slave on *.* to 'slaveuser'@'192.168.27.130' identified by 'slaveuser';
Query OK, 0 rows affected (0.00 sec)
這個新建使用者在user中就有所體現了。
mysql> select host,user,password from user;
+----------------+-----------+-------------------------------------------+
| host | user | password |
+----------------+-----------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| oel1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | |
| ::1 | root | |
| % | test | |
| 192.168.27.130 | slaveuser | *7890E850D4C4DF85267DEC80307D6CCAEC115B2F |
+----------------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)
檢視master的情況
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mysql_oel1_bin.000004 | 520 | | | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
然後到slave端,重新啟動一下,配置一下server-id我們設定為2,指定埠為1551
$MYSQL_BASE/bin/mysqld_safe --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_DATA --port=1551 --log-bin=mysql_oel1_slv1_bin --log-error=/u02/mysqlslv1/log/log_error.log --long_query_time=5 --slow-query-log=true --slow-query-log-file=/u02/mysqlslv1/log/slow_qeury.log --socket=/u02/mysqlslv1/mysql_slv1.sock --server-id=2 &
啟動完成之後,執行下面的語句來在slave端配置就可以了,這個過程就如同一個db link的感覺。
mysql> change master to master_host='192.168.27.130', master_user='slaveuser', master_password='slaveuser',master_port=1550;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
啟動之後。直接檢視show slave status \G就能看到slave端的一個基本情況了。很可能由於操作原因,出現一些複製的問題,我們可以指定skip的範圍,下面這樣操作。
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL sql_slave_skip_counter =100;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.27.130
Master_User: slaveuser
Master_Port: 1550
Connect_Retry: 60
Master_Log_File: mysql_oel1_bin.000005
Read_Master_Log_Pos: 436
Relay_Log_File: oel1-relay-bin.000010
Relay_Log_Pos: 288
Relay_Master_Log_File: mysql_oel1_bin.000005
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: 98
Exec_Master_Log_Pos: 436
Relay_Log_Space: 628
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: 0
Master_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: 1
Master_UUID: 02c8b5e4-e295-11e4-8db2-000c296415de
Master_Info_File: /u02/mysqlslv1/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
然後我們在master端刪除一個表new,可以從slave端看不到這個表了。
建立之前,slave中的表
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| innodb_test |
| myisam_test |
| new |
| new_test |
| test3 |
| test4 |
+----------------+
6 rows in set (0.00 sec)
建立之後,馬上檢視,很快就同步了。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| innodb_test |
| myisam_test |
| new_test |
| test3 |
| test4 |
+----------------+
5 rows in set (0.00 sec)
然後依次類推,很輕鬆就在十多分鐘內又弄了一套slave環境。總體感覺就是輕巧和簡便。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1596043/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql for linux 配置主從複製MySqlLinux
- mysql複製--主從複製配置MySql
- MySql 主從複製配置MySql
- MySQL主從複製配置MySql
- 配置mysql5.5主從複製、半同步複製、主主複製MySql
- MYSQL主從複製配置(整理)MySql
- MYSQL主從複製製作配置方案MySql
- windows 下mysql主從複製WindowsMySql
- mysql主從複製原理及配置MySql
- MySQL主從複製與主主複製MySql
- Windows 環境下,MySQL 的主從複製和主主複製WindowsMySql
- windows環境下,Mysql的主從複製和主主複製WindowsMySql
- MySQL 主從複製安裝部署配置MySql
- Docker 教程十五配置MySQL 主從複製DockerMySql
- 簡單配置mysql的主從複製MySql
- MySQL 主從複製的原理和配置MySql
- MySQL的主從複製與MySQL的主主複製MySql
- mysql5.7主從複製,主主複製MySql
- MySQL主從複製、半同步複製和主主複製MySql
- MySQL 主從複製MySql
- 【MySql】主從複製MySql
- MySQL主從複製MySql
- mysql主主複製(雙主複製)配置步驟MySql
- MySQL主從複製、半同步複製和主主複製概述MySql
- Centos7 下配置mysql5.6主從複製例項(一主兩從)CentOSMySql
- MySQL主從複製配置心跳功能介紹MySql
- MySQL基於binlog主從複製配置MySql
- mysql5.6.xGTID主從複製配置MySql
- MySQL主從複製_複製過濾MySql
- MySQL的主從複製、半同步複製、主主複製詳解MySql
- MySQL主從複製原理MySql
- MySQL的主從複製MySql
- mysql--主從複製MySql
- mysql主從複製搭建MySql
- mysql 8.4 主從複製MySql
- Linux下MySQL主從複製(Binlog)的部署過程LinuxMySql
- linux下mysql主從複製,實現資料庫同步LinuxMySql資料庫
- Linux下Redis主從複製以及SSDB主主複製環境部署記錄LinuxRedis