Mysql(Mariadb)資料庫主從複製
Mysql 主從複製的實現原理圖大致如下:
MySQL 之間資料複製的基礎是 以 二進位制日誌檔案(binary log file) 來實現的 ,一臺MySQL資料庫一旦啟用二進位制日誌後,其作為master,它資料庫中所有操作都會以“事件”的方式記錄在二進位制日誌中,其他資料庫作為slave通過一個I/O執行緒與主伺服器保持通訊,並監控master的二進位制日誌檔案的變化,如果發現master二進位制日誌檔案發生變化,則會把變化複製到自己的中繼日誌中,然後slave的一個SQL執行緒會把相關的“事件”執行到自己的資料庫中,以此實現從資料庫和主資料庫的一致性,也就實現了主從複製。MySQL(MariaDB)具體詳細的安裝可以參考 《 Linux 就該這麼學》 教程的第十八章節,裡面內容寫的非常詳細,適合初學者,本文也比較適合企業應用。
主伺服器: 1、 開啟 資料庫 二進位制日誌 功能;2、 配置 資料庫認證 唯一 服務id ;3、 獲得 主庫的 二進位制日誌檔名及位置 ; 4、在主庫上面建立一個用於主庫和從庫通訊的使用者賬號 ,安全管理。
從伺服器: 1、在從庫中配置唯一 服務id;2、使用主庫建立分配的使用者賬號讀取主庫的二進位制日誌 ;3、啟用slave功能,用於主從通訊。
2. 主從資料庫內資料保持一致 ;
主資料庫(master):192.168.3.91 /CentOS Linux release 7.5.1804 (Core)
從資料庫( slave ) :192.168.3.218 /CentOS Linux release 7.5.1804 (Core)
注意: 這裡的主從都是通過yum源安裝的mariadb 5.5.56;
# yum install mariadb-server.x86_64 mariadb.x86_64 -y
# systemctl start mariadb.service && systemctl enable mariadb.service
//設定mariadb資料庫root賬號的密碼,預設root使用者是沒有密碼;
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Password updated successfully!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
Remove anonymous users? [Y/n] y
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] n
Reloading the privilege tables will ensure that all changes made so far
Reload privilege tables now? [Y/n] y
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
找到主資料庫的配置檔案 my.cnf (或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下兩行:
[mysqld] log - bin = mysql - bin # 開啟二進位制日誌 server - id = 1 #設定server - id
log-bin="/var/lib/mysql/" #設定生成的log檔名;
# systemctl restart mariadb.service
# mysql -hlocalhost -uroot -ppassword
MariaDB [(none)] > CREATE USER 'wxp' @ '192.168.3.218' IDENTIFIED BY 'password' ;# 建立使用者
MariaDB [(none)] > GRANT REPLICATION SLAVE ON * . * TO 'wxp' @ '192.168.3.218' ;# 分配許可權
MariaDB [(none)] > flush privileges ; # 重新整理許可權
3. 檢視master狀態,記錄二進位制檔名(mysql-bin.000001)和位置(492):
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 492 | | |
+------------------+----------+--------------+------------------+
[mysqld] server - id = 2 # 設定server - id,必須唯一
log-bin="/var/lib/mysql/" #設定生成的log檔名;
# systemctl restart mariadb.service
2. 重啟mysql,開啟mysql會話,執行同步SQL語句 ( 需要主伺服器主機名,登陸憑據,二進位制檔案的名稱和位置):
# mysql -hlocalhost -uroot -ppassword
MariaDB [(none)] > CHANGE MASTER TO -> MASTER_HOST = '192.168.3.91' , -> MASTER_USER = 'wxp' , -> MASTER_PASSWORD = 'password' , -> MASTER_LOG_FILE = 'mysql-bin.000001 ' , -> MASTER_LOG_POS = 492 ;
mysql> select * from mysql.slave_master_info \G
MariaDB [(none)] > start slave;
MariaDB [(none)] > show slave status\G;
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Log_File: mysql-bin.000001
Relay_Log_File: mariadb-relay-bin.000002
Relay_Master_Log_File: mysql-bin.000001
Master_SSL_Verify_Server_Cert: No
當 Slave_IO_Running 和 Slave_SQL_Running 都為YES的時候就表示主從同步設定成功了。接下來就可以進行一些驗證了,比如在主master資料庫的test資料庫的一張表中插入一條資料,在slave的test庫的相同資料表中檢視是否有新增的資料即可驗證主從複製功能是否有效,還可以關閉slave( MariaDB [(none)] >stop slave; ),然後再修改master,看slave是否也相應修改(停止slave後,master的修改不會同步到slave),就可以完成主從複製功能的驗證了。
MariaDB [test]> create table t1(Name varchar(18));
Query OK, 0 rows affected (0.03 sec)
MariaDB [test]> insert into t1(Name) values('wxp');
Query OK, 1 row affected (0.01 sec)
MariaDB [test]> select * from t1;
[root@backup-3-218 ~]# mysql -hlocalhost -uroot -ppassword
MariaDB [test]> select * from t1;
master 開啟二進位制日誌後預設記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的資料庫甚至指定的表的操作,具體在mysql配置檔案的[mysqld]可新增修改如下選項:
# vim /etc/my.cnf binlog - ignore - db = mysql binlog - ignore - db = test binlog - ignore - db = information_schema
# systemctl restart mariadb.service
# 只同步哪些資料庫,除此之外,其他不同步 binlog - do - db = wxp
mysql> change master to master_connect_retry=50;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2639200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- mysql資料庫實現主從複製MySql資料庫
- MySQL-主從複製之搭建主資料庫MySql資料庫
- MySQL-主從複製之搭建從資料庫MySql資料庫
- 資料庫主從複製資料庫
- Linux實現MySql資料庫的主從複製(一主一從)LinuxMySql資料庫
- MySQL-主從複製之同步主從資料MySql
- linux下mysql主從複製,實現資料庫同步LinuxMySql資料庫
- 搭建 mariadb 資料庫主從同步資料庫主從同步
- mysql5.7主從複製,主主複製MySql
- mysql複製--主從複製配置MySql
- MySQL主從複製MySql
- MySQL主從複製之GTID複製MySql
- 如何設定 MariaDB 主主複製
- MySQL主從複製原理MySql
- MySQL的主從複製MySql
- mysql--主從複製MySql
- mysql 8.4 主從複製MySql
- mysql主從複製搭建MySql
- MySQL主從複製之半同步複製MySql
- MySQL主從複製之非同步複製MySql非同步
- MySQL++:Liunx - MySQL 主從複製MySql
- MySQL(13)---MYSQL主從複製原理MySql
- mysql主從複製(一):一主多從MySql
- windows 下mysql主從複製WindowsMySql
- mysql實現主從複製MySql
- mysql主從延遲複製MySql
- MySQL 主從複製實操MySql
- MYSQL主從複製配置(整理)MySql
- MySQL主從複製歷程MySql
- MySQL-18.主從複製MySql
- Windows Mysql主從複製部署WindowsMySql
- Mysql 傳統主從複製MySql
- MySQL8.0主從複製MySql
- Windows 環境下,MySQL 的主從複製和主主複製WindowsMySql
- windows環境下,Mysql的主從複製和主主複製WindowsMySql
- MySQL 主從複製之多執行緒複製MySql執行緒
- 【mysql】mysql的資料庫主從(一主一從)MySql資料庫