1.準備工作
1.1 master(192.168.142.128) slave(192.168.142.129)
1.2 master 伺服器與slave伺服器之間應該能夠ping通,并開啟了3306(mysql預設端口)端口
1.3 master伺服器與salve伺服器安裝mysql (yum install mysql mysql-server)
1.4 master資料庫與slave資料庫版本要保持一緻
1.5 master資料庫與slave資料庫分别設定遠端通路權限(GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;)
2.修改master主資料庫配置
2.1 修改master(192.168.142.128)配置檔案
# vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //開啟binlog日志功能(必須)
server-id=128 //伺服器唯一ID,預設為1,一般取IP最後一位
3.修改slave主資料庫配置
3.1 修改slave(192.168.142.129)配置檔案
# vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //開啟binlog日志功能(必須)
server-id=129 //伺服器唯一ID,預設為1,一般取IP最後一位
4.重新開機master和slave伺服器的mysql
4.1 # /etc/init.d/mysqld restart
5.master主伺服器授權slave
5.1 # mysql -uroot -proot //登入master主伺服器mysql
mysql > GRANT REPLICATION SLAVE ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword';
注:@後面的%代表可以讓所有用戶端連接配接,可授權單獨的ip(192.168.142.129)連接配接
6.查詢master主伺服器mysql狀态
6.1 # mysql -uroot -proot //登入master主伺服器mysql
mysql> show master status; +----------------------------+---------------+------------------------+----------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------------+---------------+------------------------+----------------------------+
| mysql-bin.000006 | 378 | | |
+----------------------------+---------------+------------------------+----------------------------+
注:執行完此操作後不再對master主伺服器mysql進行操作,防止master主伺服器masql狀态值變化
7.配置slave從伺服器mysql
7.1 # mysql -uroot -proot //登入slave主伺服器mysql
mysql> CHANGE MASTER TO MASTER_HOST='192.168.142.128',
-> MASTER_USER='myuser',
-> MASTER_PASSWORD='mypassword',
-> MASTER_LOG_FILE='mysql-bin.000006',
-> MASTER_LOG_POS=378;
注:MASTER_HOST : master主伺服器ip
MASTER_USER : master主伺服器使用者名
MASTER_PASSWORD : master主伺服器密碼
MASTER_LOG_FILE : master主伺服器二進制日志檔案
MASTER_LOG_POS : master主伺服器二進制日志檔案開始位置
7.2 mysql> start slave; //啟動slave從伺服器複制功能
8.檢查slave從伺服器複制功能狀态
8.1 # mysql -uroot -proot //登入slave主伺服器mysql
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.142.128 //master主伺服器位址
Master_User: root //master主伺服器授權賬戶
Master_Port: 3306 //master主伺服器mysql資料庫端口
Connect_Retry: 60
Master_Log_File: mysql-bin.000006 //二進制日志檔案
Read_Master_Log_Pos: 378 //同步讀取二進制日志的位置
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 524
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes //此狀态必須為YES
Slave_SQL_Running: Yes //此狀态必須為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: 378
Relay_Log_Space: 681
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: 128
注:至此主從伺服器配置完成
9.主從mysql伺服器測試
9.1 # mysql -uroot -proot //登入master主伺服器mysql
mysql> show databases; //先檢視一下資料庫
+--------------------------------+
| Database |
+--------------------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------------------+
#建立一個test資料庫
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
#選擇資料庫
mysql> use test;
Database changed
#建立表
mysql> CREATE TABLE `user` (
-> `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
-> `name` varchar(20) NOT NULL DEFAULT '',
-> `age` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
#插入資料
mysql> INSERT INTO `user` (`id`,`name`,`age`) VALUES (1,'zhangsan',10);
Query OK, 1 row affected (0.00 sec)
9.2 驗證奇迹(看看slave資料庫是否已經建立了test資料庫和user表并寫入資料了)
# mysql -uroot -proot //登入slave主伺服器mysql
#先檢視一下資料庫
mysql> show databases;
+--------------------------------+
| Database |
+--------------------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------------------+
#選擇資料庫
mysql> use test;
Database changed
#檢視表
mysql> show tables;
+-------------------------+
| Tables_in_test |
+-------------------------+
| user |
+-------------------------+
#檢視資料
mysql> select * from user;
+-------+----------------+--------+
| id | name | age |
+-------+----------------+--------+
| 1 | zhangsan | 10 |
+-------+----------------+--------+
至此所有測試完成