【運維筆記】linux+mysql實現主從複製、主主複製(詳細步驟)

1、部署:

1.1、 環境:
    系統:centos6.5
    mysql版本:MariaDB-10.3.18
1.2、清單:
    虛擬主機1:192.168.10.88 數據庫版本:MariaDB-10.3.18
    虛擬主機2:192.168.10.99 數據庫版本:MariaDB-10.3.18
1.3、安裝數據庫:
    Linux/Windows 安裝mariadb,並添加/卸載到window服務,跟隨系統啓動


2、準備工作:

2.1、linux查看mysql目錄:

[root@LinuxCentOS6 /]# which mysql
/usr/bin/mysql

2.2、linux查看配置文件位置:

[root@LinuxCentOS6 /]# /usr/bin/mysql --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf 

這個信息的意思是: 服務器首先讀取的是/etc/my.cnf文件,如果前一個文件不存在則繼續讀~/.my.cnf文件,如若還不存在依此類推;如若沒有配置文件可自行百度以下。


3、配置主從複製:

3.1、 在主機192.168.10.88上配置主服務器

3.1.1、備份主服務器原有數據到從服務器:

[root@LinuxCentOS6 /]# mysqldump -uroot -p --all-databases --lock-all-tables > /data/mysql_data/master_db.sql

說明:

  • -u :用戶名
  • -p :示密碼
  • –all-databases :導出所有數據庫
  • –lock-all-tables :執行操作時鎖住所有表,防止操作時有數據修改
  • /data/mysql_data/master_db.sql :導出的備份數據(sql文件)位置,可自己指定任意位置

3.1.2、修改mysql配置文件,在配置文件相應位置添加如下內容,命令:vi /etc/my.cnf.d/server.cnf

[root@LinuxCentOS6 /]# vi /etc/my.cnf.d/server.cnf
#
[server]
#...
[mysqld]
#...
[galera]
#...
[mariadb-10.3]
#...
#------------------------------- mysql主從複製配置:主數據庫配置 -------------------------------
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
server-id = 88
log-bin = master-bin
log-bin-index=master-bin.index
#-----------------------------------------------------------------------------------------------
~                                                                                                
~                                                                                                
~                                                                                                
-- INSERT --

說明:

  • server-id:區分從庫的編號,必須唯一(可以停服修改)
  • innodb_file_per_table:拆分表數據存儲
  • log-bin:開啓二進制日誌

備註:保存上一個編輯界面,按ESC鍵,再執行shift+英文冒號鍵,輸入:wq按回車保存

3.1.3、重啓mysql,執行命令:service mysql restart

root@LinuxCentOS6 /]# service mysql restart
Shutting down MariaDB.                                     [  OK  ]
Starting MariaDB.191016 14:27:38 mysqld_safe Logging to '/var/lib/mysql/LinuxCentOS6.err'.
191016 14:27:38 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
                                                           [  OK  ]
[root@LinuxCentOS6 /]# 

3.1.4、執行命令:mysql -uroot -p123456,登入主服務器192.168.10.88中的mysql:

[root@LinuxCentOS6 /]# mysql -uroot -p123456

3.1.5、執行如下SQL語句,創建用於從服務器同步數據使用的帳號,並刷新數據庫權限:
1)創建名爲slave的備份賬號:GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
2)刷新數據庫權限:FLUSH PRIVILEGES;

mysql [(none)]>
mysql [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
Query OK, 0 rows affected (0.000 sec)
mysql [(none)]>
mysql [(none)]> FLUSH PRIVILEGES;
mysql [(none)]>
Query OK, 0 rows affected (0.000 sec)

3.1.6、獲取主服務器的二進制日誌信息:SHOW MASTER STATUS;

mysql [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      329 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

File爲使用的日誌文件名字,Position爲使用的文件位置,這兩個參數須記下,配置從服務器時會用到


3.2、在主機192.168.10.99上配置從服務器

3.2.1、修改mysql配置文件,在配置文件相應位置添加如下內容,命令:vi /etc/my.cnf.d/server.cnf

[root@LinuxCentOS6 /]# vi /etc/my.cnf.d/server.cnf
#
[server]
#...
[mysqld]
#...
[galera]
#...
[mariadb-10.3]
#...
#------------------------------- mysql主從複製配置:從數據庫配置 -------------------------------
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
server-id = 99
relay_log = slave_relay_bin
#-----------------------------------------------------------------------------------------------
~                                                                                                
~                                                                                                
~                                                                                                
-- INSERT --

說明:

  • server-id:區分從庫的編號,必須唯一

備註:保存上一個編輯界面,按ESC鍵,再執行shift+英文冒號鍵,輸入:wq按回車保存

3.2.2、重啓mysql,執行命令:service mysql restart
3.2.3、執行命令:mysql -uroot -p123456,登入從服務器192.168.10.99中的mysql
3.2.4、執行如下SQL語句,設置連接到master主服務器:

mysql [(none)]> change master to master_host='192.168.10.88',master_user='slave',
master_password='123456',master_log_file='master-bin.000001',master_log_pos=329;

說明:

  • 測試從庫是否能連接上主庫mysql -uslave -p123456 -h192.168.10.88
  • master_host:主服務器Ubuntu的ip地址
  • master_log_file: 前面查詢到的主服務器日誌文件名
  • master_log_pos: 前面查詢到的主服務器日誌文件位置

3.2.5、開啓同步SQL:

mysql [(none)]> start slave;

注:關閉同步語句stop slave;

3.2.6、查看同步狀態SQL:

mysql [(none)]> show slave status;

注:查詢結果中包含這兩項,即表示成功:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes


3.3、測試主從同步:

4.1.1、測試,在主服務器上創建庫,創建表,插入數據,可以在從服務器上看到數據被同步過來:

CREATE DATABASE test_db CHARACTER SET utf8 COLLATE utf8_general_ci;
USE test_db;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES ('1', '張三');
INSERT INTO `t_user` VALUES ('2', '李四');
INSERT INTO `t_user` VALUES ('3', '王五');

測試結果:兩個數據庫都有名爲test_db庫以及t_user表和三條數據

----------------------------------- 192.168.10.88主數據庫 -----------------------------------
mysql [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+
6 rows in set (0.000 sec)

----------------------------------- 192.168.10.99主數據庫 -----------------------------------
mysql [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+
6 rows in set (0.000 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章