Mariadb數據轉移和主從複製

Mariadb可以看做mysql的分支,操作基本和mysql一致。

數據轉移

只是將數據從一個節點的數據庫轉移到另一個節點的數據庫。。。
先將數據庫備份成一個sql文件,再在其它節點執行該sql完成數據庫數據轉移。

數據庫備份。

將mariadb中的數據庫庫備份成一個sql執行文件。

[root@mariadb-server1 ~]# mysqldump -help
Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

可以備份

  • 單個數據庫 直接指定數據庫名
  • 多個數據庫 --databases 指定多個數據庫名
  • 所有數據庫 --all-databases

示例1 只備份cloud_usage數據庫。

mysqldump -u root -p cloud_usage > cloud_usage.sql

輸入密碼即可開始備份
cloud_usage.sql 爲備份的sql文件,文件名可以任意,也不用是sql後綴。
只備份單個數據庫的sql文件不會說明使用的哪個數據庫,因此在其它節點數據庫執行時要指明數據庫。

示例2 備份所有的數據庫

mysqldump -u root -p --all-databases > alldatabases.sql

會將數據庫所有內容寫入sql 文件。

sql 文件大致內容

[root@mariadb-server1 ~]# head -30 cloud_usage.sql 
-- MySQL dump 10.14  Distrib 5.5.65-MariaDB, for Linux (x86_64)
--
-- Host: localhost    Database: cloud_usage
-- ------------------------------------------------------
-- Server version	5.5.65-MariaDB

--
-- Table structure for table `account`
--

DROP TABLE IF EXISTS `account`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `account` (
  `id` bigint(20) unsigned NOT NULL,
  `account_name` varchar(100) DEFAULT NULL COMMENT 'an account name set by the creator of the account, defaults to username for single accounts',
  `uuid` varchar(40) DEFAULT NULL,
  `type` int(1) unsigned NOT NULL,
  `domain_id` bigint(20) unsigned DEFAULT NULL,

大約就是一些 數據庫表的增刪語句,不過單個數據庫的sql備份沒有use 語句指明數據庫

[root@mariadb-server1 ~]# head -30 alldatabases.sql 
-- MySQL dump 10.14  Distrib 5.5.65-MariaDB, for Linux (x86_64)
--
-- Host: localhost    Database: 
-- ------------------------------------------------------
-- Server version	5.5.65-MariaDB


--
-- Current Database: `cloud`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `cloud` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `cloud`;

--
-- Table structure for table `account`
--

DROP TABLE IF EXISTS `account`;

多個數據庫的sql 文件存在use 語句,指明瞭操作哪個數據庫。

sql語句執行 兩種方式

方式一 如果sql腳本指定了數據庫 -D 參數可以省略

mysql –u用戶名 –p密碼 –D數據庫 <[sql腳本文件路徑全名]

mysql -u root -p-D cloud_usage < ./cloud_usage.sql 

再輸入密碼即可

方式二,進入MySQL命令行,執行source命令。如果sql文件未指定數據庫,需提前使用 use 數據庫 指令指定數據庫

mysql –u用戶名 –p密碼
source [sql腳本文件的路徑全名]

Mariadb 主從備份

概念轉自他人

MySQL之間數據複製的基礎是以二進制日誌文件(binary log file)來實現的,一臺MySQL數據庫一旦啓用二進制日誌後,其作爲master,它數據庫中所有操作都會以“事件”的方式記錄在二進制日誌中,其他數據庫作爲slave通過一個I/O線程與主服務器保持通信,並監控master的二進制日誌文件的變化,如果發現master二進制日誌文件發生變化,則會把變化複製到自己的中繼日誌中,然後slave的一個SQL線程會把相關的“事件”執行到自己的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從複製。

實現MySQL主從複製配置要求:

主服務器:1、開啓數據庫二進制日誌功能;2、配置數據庫認證唯一服務id;3、獲得主庫的二進制日誌文件名及位置;4、在主庫上面創建一個用於主庫和從庫通信的用戶賬號,安全管理。

從服務器:1、在從庫中配置唯一服務id;2、使用主庫創建分配的用戶賬號讀取主庫的二進制日誌;3、啓用slave功能,用於主從通信。

作者:易霂
鏈接:https://www.jianshu.com/p/fb404e2a681b
來源:簡書

測試一主二從備份。準備三個虛擬機
192.168.199.81 mariadb-server1
192.168.199.82 mariadb-server2
192.168.199.83 mariadb-server3
安裝 mariadb 服務

yum -y install mariadb-server

mariadb-server1 作爲主機master 其餘兩個作爲從機 slave。一般設置主從備份,主機用來寫數據,客戶端從salve讀取數據。

在配置主從複製之前作爲master的的數據庫中有數據的話,主從複製是不會將之前的數據寫入到從機的。如果希望主從數據庫數據保持一致,需要先將主數據庫的內容備份到從數據庫。採用上面的數據轉移方法即可

master主機192.168.199.91 master設置

編輯mariadb配置文件

vi /etc/my.cnf

在mysqld 模塊中加入

bind-address = 0.0.0.0
log-bin = mysql-bin
server-id = 1

bind-address = 0.0.0.0 表示允許其他主機連接到本數據庫,如果不設置的話,Slave_IO_Running狀態可能一直是connecting
log-bin 和 server-id 是必須設置的。log-bin開啓二進制日誌文件,這是主從複製的基礎,server-id 設置全局唯一的server-id。
其它可選的相關配置

innodb-file-per-table =ON
skip_name_resolve=ON
read-only=0 			# 設置只讀,爲零表示讀寫都可以
binlog-ignore-db=mysql 	# 可選 不進行同步的數據庫
binlog-do-db=stusents 	# 可選 只同步這些數據庫

默認應該是所有數據庫表的修改都會記錄到日誌文件。。。

重啓數據庫並進入數據庫控制檯

systemctl restart mariadb
mysql -u root -p

創建一個用於主從複製的 用戶 並賦予對所有庫的所有表複製權限。
賬號 feng 密碼123456 所有網段有效有效

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'feng'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權限授權給別人。注意:經常有人在創建操作用戶的時候不指定WITH GRANT OPTION選項導致後來該用戶不能使用GRANT命令創建用戶或者給其它用戶授權。
如果不想這個用戶有這個grant的權限,可以不加

刷新使生效

flush privileges;

查看master狀態,已經開啓二進制日誌文件了。

show master status;

記錄下 File 和 Position。在設置從服務器是需要使用。
File和Position在master數據庫改變數據後是會改變的。如果一個slave不是一開始就加入的,最好要先將master主機數據庫的數據先複製一遍。見上文。 或者 記得主從複製開啓時File和Position的 初值,將初值填入從機設置。

slave從機 192.168.199.82 192.168.199.83設置

192.168.199.81編輯配置文件。
只用設置惟一的 sever-id

vi /etc/my.cnf
server-id = 2

重啓mariadb服務

 systemctl restart mariadb

進入數據庫控制檯

mysql -u root -p

查看 salve 配置,默認爲空。

show slave status\G

進行設置

CHANGE MASTER TO MASTER_HOST="主機IP",
MASTER_USER="賬戶",
MASTER_PASSWORD="密碼",
MASTER_LOG_FILE="主機二進制日誌文件",
MASTER_LOG_POS=具體值;

例如

CHANGE MASTER TO MASTER_HOST="192.168.199.81",
MASTER_USER="feng",
MASTER_PASSWORD="123456",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=500;

設置完成,查看 slave

show slave status\G

slave未啓動
可以看到設置後slave不爲空了,但是slave未開啓,因此
Slave_IO_Running: No
Slave_SQL_Running: No
只有Slave_IO_Running Slave_SQL_Running運行,從機纔會正常複製主服務器數據 因此需要啓動slave

啓動 slave

start slave;

再次查看slave狀態
slave開啓後狀態Slave_IO_Running: Yes
Slave_SQL_Running: Yes

從機設置完成。。。

192.168.199.83進行基本相同設置。
注意server-id 不能一致 可設置爲3

vi /etc/my.cnf
server-id = 3

其他一致

測試主從複製使用

設置完畢,可以測試一下是否成功。
在192.168.199.81 節點master數據庫添加數據。查看兩個slave節點數據庫是否有新增內容。

mysql -u root -p

創建數據庫 hero 使用該數據庫 創建表hero 添加值

create database hero;
use hero;
create table hero(id int primary key auto_increment, heroName varchar(10) not null, age int default 18);
insert into hero values(0, "張無忌", 20);
insert into hero values(0, "郭靖", 20);
insert into hero values(0, "楊過", 20);

可以查看192.168.199.82 或 192.168.199.83的數據庫。果然多了hero數據庫
slave有數據
可以看到從庫增加了相應的庫和表及數據。(數據沒看,可以自己測試。。。)

mariadb數據庫使用其他。

編碼

show variables like 'character%';

character_set_database

mariadb 數據庫的默認編碼是latin1,不支持中文。
原編碼

如果要設置 修改默認編碼,需要修改三個文件配置。

vi /etc/my.cnf.d/client.cnf 

在[client] 模塊加上

default-character-set=utf8
vi /etc/my.cnf.d/mysql-clients.cnf 

在[mysql]模塊加上

default-character-set=utf8
vi /etc/my.cnf.d/server.cnf 

在[mysqld]模塊加上

character-set-server=utf8

修改完成重啓 mariadb數據庫

systemctl restart mariadb

默認編碼已經變成了 utf8
utf-8編碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章