mysql資料庫的多實例與主從同步。

来源:https://www.cnblogs.com/shy13138/archive/2019/09/11/11508428.html
-Advertisement-
Play Games

1、MySQL的多實例: 多實例的特點:能夠有效地利用伺服器的資源,節約伺服器的資源 MySQL多實例的配置有兩種,第一是使用一個配置文件,這種方法不推薦使用,容易出錯;第二種是用多個配置文件,這種方法的好處是可以方便管理。 [root@localhost 3308]# tree -L 2 /dat... ...


1、MySQL的多實例:
多實例的特點:能夠有效地利用伺服器的資源,節約伺服器的資源
MySQL多實例的配置有兩種,第一是使用一個配置文件,這種方法不推薦使用,容易出錯;第二種是用多個配置文件,這種方法的好處是可以方便管理。
[root@localhost 3308]# tree -L 2 /data/
/data/
├── 3307
│   ├── data
│   ├── my.cnf
│   ├── mysql
│   ├── mysql_3307.err
│   ├── mysqld.pid
│   └── mysql.sock
└── 3308
    ├── data
    ├── my.cnf
    ├── mysql
    ├── mysql_3308.err
    ├── mysqld.pid
    └── mysql.sock

安裝mysql
通過壓縮包哦安裝,提前下載mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz,解壓即可。
添加mysql用戶,
useradd -s /sbin/nologin mysql

將解壓的文件移動到/usr/local並做軟連接
mv mysql-5.5.62-linux-glibc2.12-x86_64 /usr/local
ln -s mysql-5.5.62-linux-glibc2.12-x86_64 /usr/local/mysql

創建每個服務埠的data文件夾
mkdir -p /data/{3307,3308}

進行mysql初始化:
./scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/data/3307/data
./scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/data/3308/data

配置埠的配置文件my.cnf
vim /data/3307/my.cnf
vim /data/3308/my.cnf
[3307/my.cnf]
[client]
port            = 3307
socket          = /data/3307/mysql.sock

[mysql]
no-auto-rehash

[mysqld]
user    = mysql
port    = 3307
socket  = /data/3307/mysql.sock
basedir = /application/mysql
datadir = /data/3307/data
open_files_limit    = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_cache = 614
external-locking = FALSE
max_allowed_packet =8M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
#default_table_type = InnoDB
thread_stack = 192K
#transaction_isolation = READ-COMMITTED
tmp_table_size = 2M
max_heap_table_size = 2M
#long_query_time = 1
#log_long_format
#log-error = /data/3307/error.log
#log-slow-queries = /data/3307/slow.log
pid-file = /data/3307/mysql.pid
#log-bin = /data/3307/mysql-bin
relay-log = /data/3307/relay-bin
relay-log-info-file = /data/3307/relay-log.info
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
#myisam_sort_buffer_size = 1M
#myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
#myisam_repair_threads = 1
#myisam_recover

lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062
replicate-ignore-db=mysql

server-id = 8

innodb_additional_mem_pool_size = 4M
innodb_buffer_pool_size = 32M
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 4M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
[mysqldump]
quick
max_allowed_packet = 2M

[mysqld_safe]
log-error=/data/3307/mysql_3307.err
pid-file=/data/3307/mysqld.pid
3308的配置文件把3307改成3308

配置各埠的啟動文件
vim /data/3307/mysql
vim /data/3308/mysql
[3307/mysql]
#!/bin/bash
# chkconfig: 2345 21 60
# description: msyql start scripts
port=3307
user=root
passwd=123456
path=/application/mysql/bin
#socket=/tmp/mysql.sock
mysqlsock="/data/${port}/mysql.sock"
function_start(){
        if [ -e $mysqlsock  ];then
        echo "mysql already running..."
        else
                $path/mysqld_safe --defaults-file=/data/${port}/my.cnf  &>/dev/null &
                [ $? -eq 0 ]&&{
#               . /etc/init.d/functions
                echo "mysql start success!!!" 
                }
        fi
}

function_stop(){
        if [ -e $mysqlsock ];then
                $path/mysqladmin -u$user -p$passwd -S $mysqlsock shutdown  &>/dev/null &
                [ $? -eq 0 ]&& {
#               . /etc/init.d/functions
                echo  "mysql stop success!!!" 
                }||echo  "mysql stop failed" 
        else
                echo "mysql dont start"
        fi
}
function_restart(){

        if [ -e $socket  ];then
        function_stop
        sleep 2
        function_start
        else
        function_start
fi
}
function_status(){
        [ -e $msyqlsock ]&& echo "MySQL IS RUNNING" || echo "MySQL IS DOWN"
}
case $1 in
start)
        function_start
;;
stop)
        function_stop
;;
status)
        function_status
;;
restart)
        function_restart
;;
*)
echo "USAGE |$0{start|stop|status|restart}"
esac
3308的啟動文件將port改成3308

將/data多實例文件添加許可權
 chown -R mysql.mysql /data/

啟動資料庫

[root@localhost 3307]# mysqld_safe --defaults-file=/data/3307/my.cnf
/data/3307/mysql start 

進入資料庫
[root@localhost ~]# mysql -S /data/3307/mysql.sock 
[root@localhost ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      18787/mysqld        
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      19506/mysqld       

2、MySQL的主從複製
MySQL資料庫的主從複製方案,與使用scp/rsync等命令進行的文件級別複製類似,都是數據的遠程傳輸,只不過MySQL的主從複製是其自帶的功能,無需藉助第三方工具,而且,MySQL的主從複製並不是資料庫磁碟上的文件直接拷貝,而是通過邏輯的binlog日誌複製到要同步的伺服器本地,然後由本地的線程讀取日誌裡面的SQL語句,重新應用到MySQL資料庫中。
主從複製原理
1)在Slave伺服器上執行start slave命令開啟主從複製開關,開始進行主從複製
2)此時,Slave伺服器的I/O線程會通過在Master上已經授權的複製用戶許可權請求連接Master伺服器,並請求從指定binlog日誌文件的指定位置(日誌文件名和位置就是在配置主從複製服務時執行change master命令指定的)之後開始發送binlog日誌內容。
3)Master伺服器接收到來自Slave伺服器的I/O線程的請求後,其上負責複製的I/O線程會根據Slave伺服器的I/O線程請求的信息分批讀取指定binlog日誌文件指定位置之後的binlog日誌信息,然後返回給Slave端的I/O線程。返回的信息中除了binlog日誌內容外,還有在Master伺服器端記錄的新的binlog文件名稱,以及在新的binlog中的下一個指定更新位置。
4)當Slave伺服器的I/O線程獲取到Master伺服器上I/O線程發送的日誌內容,日誌文件及位置點後,會將binlog日誌內容依次寫到Slave端自身的Relay Log(即中繼日誌)文件(MySQL-relay-bin.xxxx)的最末端,並將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取Master端新binlog日誌時能夠告訴Master伺服器從新binlog日誌的指定文件及位置開始請求新的binlog日誌內容。
5)Slave伺服器端的SQL線程會實時檢測本地Relay Log中I/O線程新增加的日誌內容,然後及時地把Relay Log文件中的內容解析成SQL語句,併在自身Slave伺服器上按解析SQL語句的位置順序執行應用這些SQL語句,併在relay-log.info中記錄當前應用中繼日誌的文件名及位置點。
開啟主資料庫的log-bin:
#在my.cnf文件里的[mysqld]下編輯:
log-bin = /data/3306/mysql-bin

測試log-bin是否開啟:
[root@localhost 3307]# mysql -u root -p -S /data/3306/mysql.sock 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 5     |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

建立用於從庫複製的賬號yunjisuan
mysql>  grant replication slave on *.* to 'yunjisuan'@'10.6.29.154' identified by 'yunjisuan123';
Query OK, 0 rows affected (0.01 sec)
刷新許可權
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+-----------+-----------------------+
| user      | host                  |
+-----------+-----------------------+
| root      | 127.0.0.1             |
| yunjisuan | 10.6.29.154           |
| root      | ::1                   |
|           | localhost             |
| root      | localhost             |
|           | localhost.localdomain |
| root      | localhost.localdomain |
+-----------+-----------------------+
7 rows in set (0.00 sec)

備份主表
[root@localhost ~]# mysqldump -uroot -p123456 -S /data/3306/mysql.sock --events -A -B | gzip >/server/backup/mysql_bak.$(date +%F).sql.gz

查看從資料庫的serverid
[root@localhost ~]# egrep "server-id|log-bin" /data/3307/my.cnf
#log-bin = /data/3307/mysql-bin
server-id = 2

查看從數據的狀態

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.00 sec)

解壓主資料庫備份文件
[root@localhost backup]# gzip -d mysql_bak.2019-09-11.sql.gz 
把數據還原到3307
[root@localhost backup]# mysql -u root -p123456 -S /data/3307/mysql.sock <mysql_bak.2019-09-11.sql 

登錄從庫,配置複製參數
mysql> show master status
    -> ;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> CHANGE MASTER TO MASTER_HOST='10.6.29.154',MASTER_PORT=3306,MASTER_USER='yunjisuan',MASTER_PASSWORD='yunjisuan123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=345;
Query OK, 0 rows affected (0.01 sec)

開啟主從同步開關,並查看
[root@localhost backup]#  mysql -uroot -p123456 -S /data/3307/mysql.sock -e "start slave"
[root@localhost backup]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show slave status\G"
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.6.29.154
                  Master_User: yunjisuan
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 107
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: mysql
           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: 107
              Relay_Log_Space: 403
              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: 5
1 row in set (0.00 sec)


隨後在主庫創建資料庫等,再到從庫查看:
[root@localhost backup]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "create database admin1;"
[root@localhost backup]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| admin1             |
| mysql              |
| performance_schema |
| test               |
+--------------------+


這樣就完成了mysql資料庫的主從同步。

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我想把我的 python 爬蟲腳本設定為自動定時執行,我的設備是win10 操作系統,這將用到系統自帶的計劃任務功能。且我希望不管用戶是否登錄都要運行該定時任務,但在設置計劃任務的屬性時,遇到一個報錯:**所指定的賬戶名稱無效**。該報錯是如何發生的,以及如何解決?記錄如文。 ...
  • 參考:https://www.cnblogs.com/ben-ben/archive/2012/11/13/2767588.html ...
  • 步驟一: 當然是安裝rhel7操作系統啦(廢話),建議在安裝過程中系統軟體類型選擇最後一項[Server with GUI]。其他的預設一般即可。 步驟二:在初裝完成的系統中無法像Windows那樣直接安裝Oracle,需要給Oracle配置安裝環境,因為在Linux下安裝時有部分程式需要與Linu ...
  • 產生原因:yum基於python寫的,根據報錯信息提示,是yum的python版本對應不上目前python環境的版本導致的。也就是說 有人升級或者卸載了python。 解決方式: 參考:https://blog.csdn.net/zzq900503/article/details/79551715 ...
  • 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。本文鏈接:https://blog.csdn.net/qq_39038465/article/details/81478847 關於Linx方面的下載內容是按照上面的博主的方式進行操作實現虛擬機的 ...
  • 原地址 https://www.cnblogs.com/devilwind/p/6902037.html 今天在新環境里部署tomcat, 剛開始啟動很快,關閉之後再啟動,卻發現啟動日誌列印到 00:25:14.144 [localhost-startStop-1] INFO o.s.web.con ...
  • 出現問題:在安裝配置phpMyAdmin管理mysql資料庫的時候,打開phpMyAdmin登錄頁面,出現下麵的錯誤提示: 缺少 mcrypt 擴展。請檢查 PHP 配置 以CentOS 6.0系統為例來為說明: 1、安裝第三方yum源(預設yum源裡面沒有這幾個庫文件,不能使用yum安裝) wge ...
  • 常見的SQL優化 一、查詢優化 1、避免全表掃描 模糊查詢前後加%也屬於全表掃描 在where子句中對欄位進行表達式操作會導致引擎放棄使用索引而進行全表掃描,如: select id from t where num/2=100 應改為: select id from t where num=100 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...