国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

(全棧學(xué)習(xí)實(shí)踐)四、docker搭建mysql主從實(shí)踐

instein / 1986人閱讀

摘要:上需要主從服務(wù)器端配合完成初始化同步用戶主服務(wù)器端手動(dòng)同步初始數(shù)據(jù)添加測(cè)試數(shù)據(jù),適合從一臺(tái)拓展至多臺(tái)服務(wù)器的情況。

目前已完成:php7及擴(kuò)展、redis5的Dockerfile測(cè)試版編寫(xiě),稍許完善后同步上傳到github,(記下這里memcached還沒(méi)有剝離安裝)。
今天數(shù)據(jù)庫(kù),編程的一個(gè)重要原則是不要重復(fù)造輪子,php因?yàn)樾枰芏嘧远x插件、所以多帶帶編譯鏡像,其實(shí)其他包括redis都應(yīng)該使用官方的,直接pull就行。


參考官方鏡像,根據(jù)官方鏡像,準(zhǔn)備的mysql、mysql_slave文件樹(shù),添加了個(gè)數(shù)據(jù)文件夾。

[]:~/tmp/dk/mysql/mysql_slave# tree ./
./
├── config
│?? ├── conf.d #后面修改my.cnf后刪掉
│?? │?? └── docker.cnf
│?? └── my.cnf
└── data
1、創(chuàng)建mysql鏡像
[]:~/tmp/dk# docker pull mysql:8.0
# 清空舊數(shù)據(jù)庫(kù)數(shù)據(jù)
[]:~/tmp/dk# rm -rf /root/tmp/dk/mysql/data/* /root/tmp/dk/mysql_slave/data/*
[]:~/tmp/dk# docker run --name mm -p 3306:3306 -v /root/tmp/dk/mysql/data:/var/lib/mysql -v /root/tmp/dk/mysql/config:/etc/mysql 
    -e MYSQL_ROOT_PASSWORD=123456  -d mysql:8.0
[]:~/tmp/dk# docker run --name ms -p 3308:3306 -v /root/tmp/dk/mysql_slave/data:/var/lib/mysql -v /root/tmp/dk/mysql_slave/config:/etc/mysql 
    -e MYSQL_ROOT_PASSWORD=123456  -d mysql:8.0

退出后臺(tái)運(yùn)行的容器,按 Ctrl+D 進(jìn)行退出容器,請(qǐng)牢記!
run后運(yùn)行的容器進(jìn)入:

a.舊式進(jìn)入     []:~/tmp/dk# docker attach mm
b.命令進(jìn)入     []:~/tmp/dk# docker exec -it mm /bin/bash(或/bin/sh)

參考《Docker容器進(jìn)入的4種方式》
a.普通進(jìn)入:有一個(gè)問(wèn)題。當(dāng)多個(gè)窗口同時(shí)使用該命令進(jìn)入該容器時(shí),所有的窗口都會(huì)同步顯示。如果有一個(gè)窗口阻塞了,那么其他窗口也無(wú)法再進(jìn)行操作。所以docker attach命令不太適合于生產(chǎn)環(huán)境,平時(shí)自己開(kāi)發(fā)應(yīng)用時(shí)可以使用該命令。
b.推薦

-- 小內(nèi)存主機(jī)需要開(kāi)啟swap交換分區(qū),并加入開(kāi)機(jī)啟動(dòng):

[]:~/tmp/dk# vim /etc/rc.local 
# +swap
swapon /swapfile

-- mysql的重啟:
不能進(jìn)入容器、在容器中重啟,會(huì)報(bào) Unable to lock ./ibdata1 error: 11 的錯(cuò)誤,容器無(wú)法對(duì)共享文件加鎖。

# 重啟mysql容器
[]:~# docker restart mm
2、mysql配置
[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql

# 主從賦值增加項(xiàng)
log-bin=mysql-bin        #[必須]啟用二進(jìn)制日志
server-id=1              #[必須]服務(wù)器唯一ID,默認(rèn)是1
binlog-do-db=test            #要同步的數(shù)據(jù)庫(kù)名,從服務(wù)器不需要這幾項(xiàng)
binlog-ignore-db = mysql     #不同步mysql庫(kù)和sys庫(kù)
binlog-ignore-db = sys
replicate-ignore-db=mysql
secure-file-priv= NULL
# 忽略表名大小寫(xiě)
lower_case_table_names        = 1

character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect="SET NAMES utf8mb4"
#是否對(duì)sql語(yǔ)句大小寫(xiě)敏感,1表示不敏感
lower_case_table_names=1

#最大連接數(shù)
max_connections = 150
#最大錯(cuò)誤連接數(shù)
max_connect_errors=1000
#TIMESTAMP如果沒(méi)有顯示聲明NOT NULL,允許NULL值
explicit_defaults_for_timestamp=true

#SQL數(shù)據(jù)包發(fā)送的大小,如果有BLOB對(duì)象建議修改成1G
max_allowed_packet=2M
#MySQL連接閑置超過(guò)一定時(shí)間后(單位:秒)將會(huì)被強(qiáng)行關(guān)閉
#MySQL默認(rèn)的wait_timeout  值為8個(gè)小時(shí), interactive_timeout參數(shù)需要同時(shí)配置才能生效
interactive_timeout = 1800
wait_timeout = 1800

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

#時(shí)區(qū)
default-time_zone = "+8:00"
3、主從同步數(shù)據(jù)

在主服務(wù)器添加用于同步的賬戶。上需要主從服務(wù)器端配合完成

a.初始化同步用戶
### 主服務(wù)器端
mysql> CREATE USER "repl"@"%" IDENTIFIED WITH mysql_native_password BY "Ron_master_1";
mysql> GRANT REPLICATION SLAVE ON *.* TO "repl"@"%";
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      825 | test         | mysql,sys        |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
b.手動(dòng)同步初始數(shù)據(jù)

添加測(cè)試數(shù)據(jù),適合從一臺(tái)拓展至多臺(tái)服務(wù)器的情況。如果庫(kù)數(shù)據(jù)已同步,跳過(guò)此步驟。
現(xiàn)在master中已有數(shù)據(jù),需要先同步到slave,登錄master,執(zhí)行鎖表操作

### 容器mm(master)主服務(wù)器添加初始庫(kù)、表,及后續(xù)操作
mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test
Database changed
mysql> create table sys ( id int unsigned auto_increment primary key, `column` varchar(255) not null );
Query OK, 0 rows affected (0.03 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     1272 | test         | mysql,sys        |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#只讀鎖表,等待復(fù)制
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)
# 等待主從關(guān)系建立完成后,解鎖寫(xiě)入
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
### 容器ms(slave):從服務(wù)器導(dǎo)入master的庫(kù)數(shù)據(jù)
xx@fd8bb25a86fc:/# mysql -uroot -p123456
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> quit
Bye
root@fd8bb25a86fc:/# mysqldump -uroot -p -h remote_host -P3306 test > /tmp/test.dump
Enter password: 
# 或直接use然后source file
root@fd8bb25a86fc:/# mysql -u root -p test < /tmp/test.dump
c.建立主從關(guān)系,完成同步

這里需要注意的參數(shù)是master_log_file、master_log_pos改為與master當(dāng)前值相同。

### 容器ms(slave):從服務(wù)器添加
# 查詢當(dāng)前狀態(tài):show slave statusG; 重置復(fù)制狀態(tài)參數(shù):reset slave all; 關(guān)閉:stop slave;
# remote_host可以是 192.168.1.102 的內(nèi)網(wǎng)、公網(wǎng)地址
mysql> change master to master_host="remote_host",master_port=3306,master_user="repl",
    master_password="Ron_master_1",master_log_file="mysql-bin.000003",master_log_pos=1272;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
#查詢?cè)O(shè)置結(jié)果
mysql> show slave statusG;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xx.xx.xx.xx 
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1272
               Relay_Log_File: 6e9640cfaa53-relay-bin.000003
                Relay_Log_Pos: 322
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
... ...

Slave_IO_Running和 Slave_SQL_Running都是Yes,說(shuō)明主從復(fù)制已經(jīng)開(kāi)啟成功。

小結(jié)

這其中遇到很多問(wèn)題,比如:mysql的容器無(wú)法啟動(dòng)(配置文件問(wèn)題,或使用現(xiàn)成配置好的,通過(guò)docker logs mm查看日志解決),無(wú)法從內(nèi)部重啟(搜索良久,應(yīng)該是官方的問(wèn)題,也確實(shí)沒(méi)有從外部方便,只是對(duì)不是用mysql命令restart的別扭而已),主從復(fù)制沒(méi)好(要點(diǎn):my.cnf配置,鎖表/確定不寫(xiě)入也行,master_log_file、master_log_pos參數(shù))。
以前只是看過(guò)些,浮于理論,實(shí)踐完成后才感覺(jué)通暢。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/27938.html

相關(guān)文章

  • 全棧學(xué)習(xí)實(shí)踐、docker搭建redis主從實(shí)踐

    摘要:前面容器重建后需要重新運(yùn)行命令綁定關(guān)聯(lián),需要命令行下生效。直接同步成功,在查看關(guān)系均有對(duì)方信息。是否要守護(hù)進(jìn)程這里是經(jīng)過(guò)多次測(cè)試,發(fā)現(xiàn)容器重啟,也會(huì)正常啟動(dòng)。哨兵的配置于此類似,略過(guò)。 前面mysql容器重建后需要重新運(yùn)行 change master to 命令綁定關(guān)聯(lián),8.0需要命令行下生效。redis首先想到用官方的,沒(méi)想到進(jìn)去各個(gè)基本shell命令無(wú)法使用,所以先棄了。這次由于官...

    wall2flower 評(píng)論0 收藏0
  • 學(xué)習(xí)實(shí)踐)五、docker搭建redis主從實(shí)踐

    摘要:前面容器重建后需要重新運(yùn)行命令綁定關(guān)聯(lián),需要命令行下生效。直接同步成功,在查看關(guān)系均有對(duì)方信息。是否要守護(hù)進(jìn)程這里是經(jīng)過(guò)多次測(cè)試,發(fā)現(xiàn)容器重啟,也會(huì)正常啟動(dòng)。哨兵的配置于此類似,略過(guò)。 前面mysql容器重建后需要重新運(yùn)行 change master to 命令綁定關(guān)聯(lián),8.0需要命令行下生效。redis首先想到用官方的,沒(méi)想到進(jìn)去各個(gè)基本shell命令無(wú)法使用,所以先棄了。這次由于官...

    Pocher 評(píng)論0 收藏0
  • 【推薦】最新200篇:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語(yǔ)言和等其他語(yǔ)言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問(wèn)到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過(guò)的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語(yǔ)言和Java、python等其他語(yǔ)言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    BicycleWarrior 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

instein

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<