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_IO_Running: No
Slave_SQL_Running: No
只有Slave_IO_Running Slave_SQL_Running運行,從機纔會正常複製主服務器數據 因此需要啓動slave
啓動 slave
start 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數據庫
可以看到從庫增加了相應的庫和表及數據。(數據沒看,可以自己測試。。。)
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