天天看點

mysql之 mysql 5.6不停機主從搭建(一主一從基于日志點複制)

環境說明:

版本 version 5.6.25-log 

主庫ip: 10.219.24.25

從庫ip:10.219.24.22

os 版本: centos 6.7

已安裝熱備軟體:xtrabackup 

防火牆已關

補充:

主從複制原理: http://blog.csdn.net/zhang123456456/article/details/72972701

mysql 5.6安裝 :http://blog.csdn.net/zhang123456456/article/details/53608554

xtrabackup 安裝: http://blog.csdn.net/zhang123456456/article/details/72836184

一主一從搭建流程:

1、 主庫參數調整

-- 停止主庫mysql

[[email protected] ~]# service mysql stop

[[email protected] ~]# netstat -nltp|grep mysql|grep 3606

-- 調整 my.cnf 參數

[[email protected] ~]# cat /etc/my.cnf

[client]

password = oracle

port = 3306

socket = /data/mysql/mysql.sock

[mysqld]

server-id=25

port = 3306

socket = /data/mysql/mysql.sock

character_set_server = utf8

character_set_client = utf8

collation-server=utf8_general_ci

lower_case_table_names = 1

max_connections = 1000

datadir = /data/mysql

log_bin = /data/mysql/binarylog/binlog 

log_bin_index = /data/mysql/binarylog/binlog

binlog_format = mixed

innodb_data_file_path = ibdata1:12M:autoextend 

[mysql]

default-character-set = utf8

說明:主庫必須配置的參數

server-id (主從的server-id必須不同)、log_bin、binlog_format 

-- 啟動主庫

[[email protected] ~]# mysqld_safe --defaults-file=/etc/my.cnf &

2、 從庫參數調整

-- 停止從庫mysql

[[email protected] ~]# service mysql stop

[[email protected] ~]# netstat -nltp|grep mysql|grep 3606

-- 調整 my.cnf 參數

[[email protected] ~]# cat /etc/my.cnf

[client]

password = oracle

port = 3306

socket = /data/mysql/mysql.sock

[mysqld]

server-id=22

port = 3306

socket = /data/mysql/mysql.sock

character_set_server = utf8

character_set_client = utf8

collation-server=utf8_general_ci

lower_case_table_names = 1

max_connections = 1000

datadir = /data/mysql

log_bin = /data/mysql/binarylog/binlog 

log_bin_index = /data/mysql/binarylog/binlog

relay-log = /data/mysql/relaylog/relay

relay-log-index = /data/mysql/relaylog/relay

relay_log_purge = on

read-only = 1

[mysql]

default-character-set = utf8

說明:從庫必須配置的參數

server-id、log_bin、relay-log、read-only

3、 主庫備份

-- 主庫備份目錄

[[email protected] full]# pwd

/xtrabackup/full

-- 主庫 innobackupex 備份

[[email protected] ~]# innobackupex --user=root --password=oracle --port=3606 /xtrabackup/full/

170610 17:50:23 Backup created in directory '/xtrabackup/full/2017-06-10_17-50-19/'

MySQL binlog position: filename 'binlog.000010', position '120'

....

170610 17:50:23 completed OK!

-- 檢視備份 binlog編号 與 截止 position

[[email protected] 2017-06-10_17-50-19]# cat xtrabackup_binlog_info 

binlog.000010 120

4、 從庫建立與主庫相同的備份目錄

[[email protected] ~]# mkdir -p /xtrabackup/full

[[email protected] ~]# chown -R mysql:mysql /xtrabackup/full/

5、 主庫将備份 scp 到從庫

[[email protected] full]# pwd

/xtrabackup/full

[[email protected] full]# scp -r 2017-06-10_17-50-19 10.219.24.22:/xtrabackup/full

6、 從庫檢視scp過來的備份

[[email protected] ~]# cd /xtrabackup/full/2017-06-10_17-50-19/

[[email protected] 2017-06-10_17-50-19]# ll

total 12320

-rw-r-----. 1 root root 419 Jun 10 18:01 backup-my.cnf

-rw-r-----. 1 root root 12582912 Jun 10 18:01 ibdata1

drwxr-x---. 2 root root 4096 Jun 10 18:01 mysql

drwxr-x---. 2 root root 4096 Jun 10 18:01 performance_schema

drwxr-x---. 2 root root 4096 Jun 10 18:01 test

-rw-r-----. 1 root root 18 Jun 10 18:01 xtrabackup_binlog_info

-rw-r-----. 1 root root 113 Jun 10 18:01 xtrabackup_checkpoints

-rw-r-----. 1 root root 482 Jun 10 18:01 xtrabackup_info

-rw-r-----. 1 root root 2560 Jun 10 18:01 xtrabackup_logfile

7、 主庫建立同步使用者

mysql> GRANT replication slave ON *.* TO 'slave25'@'%' IDENTIFIED BY 'oracle'; 

Query OK, 0 rows affected (0.05 sec)

8、 從庫恢複主庫資料

-- 從庫将原有datadir檔案夾重命名到新位置,并建立原檔案夾 

[[email protected] ~]# mv /data/mysql /data/mysqlbak

[[email protected] ~]# mkdir -p /data/mysql

-- innobackupex apply-log

[[email protected] ~]# innobackupex --apply-log --user=oracle \

--password=oracle --port=3606 /xtrabackup/full/2017-06-10_17-50-19/

-- innobackupex copy 恢複的檔案到原來的資料位置

[[email protected] mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root \

--copy-back /xtrabackup/full/2017-06-10_17-50-19/

170610 18:25:11 completed OK!

-- 建立binlog目錄與 relaylog 目錄并賦權

[[email protected] ~]# mkdir -p /data/mysql/binarylog

[[email protected] ~]# mkdir -p /data/mysql/relaylog/

[[email protected] mysql]# chown -R mysql:mysql /data/mysql

9、 從庫配置與檢測

-- 從庫啟動

[[email protected] mysql]# mysqld_safe --defaults-file=/etc/my.cnf &

-- 從庫指定與主庫同步的基本資訊

mysql>

change master to

master_host='10.219.24.25',

master_port=3306,

master_user='slave25',

master_password='oracle', 

master_log_file='binlog.000010',

master_log_pos=120; 

Query OK, 0 rows affected, 2 warnings (0.04 sec)

參數解釋:

MASTER_HOST : 設定要連接配接的主伺服器的ip位址

MASTER_USER : 設定要連接配接的主伺服器的使用者名

MASTER_PASSWORD : 設定要連接配接的主伺服器的密碼

MASTER_LOG_FILE : 設定要連接配接的主伺服器的bin日志的日志名稱

MASTER_LOG_POS : 設定要連接配接的主伺服器的bin日志的記錄位置

-- 啟動slave 狀态(開始監聽msater的變化)

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

-- 檢視slave的狀态.

mysql> show slave status \G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.219.24.25 #主庫 IP

Master_User: slave25 # 主庫複制的使用者

Master_Port: 3306 # 主庫 mysqld 

Connect_Retry: 60

Master_Log_File: binlog.000010 #io_thread 讀取主庫 master_log_file

Read_Master_Log_Pos: 717 # io_thread 讀取主庫 master_log_pos

Relay_Log_File: relay.000002

Relay_Log_Pos: 877

Relay_Master_Log_File: binlog.000010 #sql_thread 執行主庫的 master_log_file

Slave_IO_Running: Yes # 關鍵的,io_thread 是否 running 

Slave_SQL_Running: Yes # 關鍵的,sql_thread 是否 running

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: 717 #sql_thread 執行主庫的 master_log_pos

Relay_Log_Space: 1040

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: 25

Master_UUID: 29d68531-4cf9-11e7-8e1f-000c297c4100

Master_Info_File: /data/mysql/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)

ERROR: 

No query specified

10、 主從同步檢查 

-- 主庫

mysql> create database repl;

Query OK, 1 row affected (0.00 sec)

mysql> use repl

Database changed

mysql> create table repl (id int);

Query OK, 0 rows affected (0.02 sec)

mysql> insert into repl values(1);

Query OK, 1 row affected (0.00 sec)

-- 從庫

mysql> show databases;

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

| Database |

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

| information_schema |

| binarylog |

| mysql |

| performance_schema |

| relaylog |

| repl |

| test |

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

7 rows in set (0.00 sec)

mysql> use repl

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from repl;

+------+

| id |

+------+

| 1 |

+------+

1 row in set (0.00 sec) >同步成功!

繼續閱讀