1.參照官網,安裝docker
2.拉取mysql鏡像(默認拉取最新的鏡像)8.0.11
dockerpullmysql
3.在宿主機創建持久化mysqldata及mysql.cnf
mkdir/usr/local/mysqlData/test/cnf mkdir/usr/local/mysqlData/test/data vi/usr/loal/mysqlData/test/cnf/mysql.cnf
設置本地文件共享:
Docker->Preferences...->FileSharing
4.添加操作權限
chmod777/usr/local/mysqlData/test/data 備注:掛載時權限驗證(操作權限)
5.運行鏡像,設置初始密碼、本機與docker端口的映射與掛載本地數據盤(啟動msyql服務)
dockerrun-itd-p3307:3306--nametest_mysql-v/usr/local/mysqlData/test/conf:/etc/mysql -v/usr/local/mysqlData/test/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=123456mysql
運行結果:
6.進入test_mysql容器
Dockerexec-ittest_mysqlbash
如圖:
7.在容器內登錄mysql
8.查看用戶信息
mysql>selectuser,host,authentication_stringfrommysql.user; +------------------+-----------+------------------------------------------------------------------------+ |user|host|authentication_string| +------------------+-----------+------------------------------------------------------------------------+ |root|%|$A$005$7o{'|'AomAw(QvF#.p5wLtCnrG6yX6XQdDVQivGr96POVL.gKnhIAhUhl3.| |mysql.infoschema|localhost|*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE| |mysql.session|localhost|*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE| |mysql.sys|localhost|*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE| |root|localhost|$A$005$0.-%i)H{uYi@zFo7uYF82fYw7DsA93vYLr4uZv6I1tSKao0sbzzcDap3| +------------------+-----------+------------------------------------------------------------------------+ 5rowsinset(0.00sec)
9.設置權限(為root分配權限,以便可以遠程連接)
mysql>grantallPRIVILEGESon*.*toroot@'%'WITHGRANTOPTION; QueryOK,0rowsaffected(0.01sec)
10.由于Mysql5.6以上的版本修改了Password算法,這里需要更新密碼算法,便于使用Navicat連接
mysql>grantallPRIVILEGESon*.*toroot@'%'WITHGRANTOPTION; QueryOK,0rowsaffected(0.01sec) mysql>ALTERuser'root'@'%'IDENTIFIEDBY'123456'PASSWORDEXPIRENEVER; QueryOK,0rowsaffected(0.11sec) mysql>ALTERuser'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'123456'; QueryOK,0rowsaffected(0.11sec) mysql>FLUSHPRIVILEGES; QueryOK,0rowsaffected(0.01sec)
11.使用navicat連接mysql,如圖:
12.建庫、建表、加數據
查看掛載本地數據盤的內容:
13.測試將容器移除后,數據是否仍然存在
dockerrm-ftest_msyql
容器已經移除了。重新部署test_mysql,參照第5的步驟,進入新容器,訪問數據庫:
xushijiandeiMac:dataxushijian$dockerrun-itd-p3307:3306--nametest_mysql-v/usr/local/mysqlData/test/conf:/etc/mysql-v/usr/local/mysqlData/test/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=123456mysql 65b7a60050aaef5765ed055acfd071c7c76f60e85dc25d0e73e0d56eae14aed1 xushijiandeiMac:dataxushijian$dockerexec-ittest_mysqlbash root@65b7a60050aa:/#mysql-uroot-p Enterpassword: WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis8 Serverversion:8.0.11MySQLCommunityServer-GPL Copyright(c)2000,2018,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| |test| +--------------------+ 5rowsinset(0.01sec) mysql>usetest; Readingtableinformationforcompletionoftableandcolumnnames Youcanturnoffthisfeaturetogetaquickerstartupwith-A Databasechanged mysql>select*fromuser_user; +---------+-----------+-------------+--------+ |user_id|user_name|phone|note| +---------+-----------+-------------+--------+ |1|沒長正|13980000000|測試| +---------+-----------+-------------+--------+ 1rowinset(0.06sec)
發現數據仍然可以使用,不需要額外的配置,實現了數據的持久化。
阿里云上docker部署MySQL(通過編排模板部署)
<1.配置同第3步類似(只是目錄變化)
master: image:'mysql:latest' environment: -MYSQL_ROOT_PASSWORD=123456 ports: -'3307:3306/tcp' volumes: -'/usr/local/mysqlData/master/conf:/etc/mysql:rw' -'/usr/local/mysqlData/master/data:/var/lib/mysql:rw' labels: aliyun.scale:'1'
<2.如下圖,已部署完成
[root@c13a6d832fd0a49398c62002361d75c60-node1~]#clear [root@c13a6d832fd0a49398c62002361d75c60-node1~]#dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 8597b7539a3amysql:latest"docker-entrypoint..."3minutesagoUp3minutes0.0.0.0:3307->3306/tcpmysql_master_1
<3.進入容器,進行權限設置,后續過程參照本機
[root@c13a6d832fd0a49398c62002361d75c60-node1/]#dockerexec-itmysql_master_1bash root@2fc0bbf48941-mysql-master-1:/#mysql-uroot-p Enterpassword: WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis8 Serverversion:8.0.11MySQLCommunityServer-GPL Copyright(c)2000,2018,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>
<4.開放3307端口,使得外網可以訪問
云服務器ECS->安全組->選擇所在的地區->配置規則->添加安全組
添加安全組,如圖:
5.外網訪問,如下圖
已連接成功。
主從環境搭建:
主庫:
[root@c13a6d832fd0a49398c62002361d75c60-node1~]#dockerexec-itmysql_master_1bash root@2fc0bbf48941-mysql-master-1:/#mysql-uroot-p Enterpassword: WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis9 Serverversion:8.0.11MySQLCommunityServer-GPL Copyright(c)2000,2018,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| +--------------------+ 4rowsinset(0.30sec) mysql>createdatabasetest; QueryOK,1rowaffected(0.12sec) mysql>showdatabase; ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'database'atline1 mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| |test| +--------------------+ 5rowsinset(0.00sec)
從庫:
[root@c13a6d832fd0a49398c62002361d75c60-node1~]#dockerexec-itmysql-slave_slave_1bash root@c8661e16e3fd-mysql-slave-slave-1:/#mysql-uroot-p Enterpassword: WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnectionidis10 Serverversion:8.0.11MySQLCommunityServer-GPL Copyright(c)2000,2018,Oracleand/oritsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand/orits affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement. mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| +--------------------+ 4rowsinset(0.40sec) mysql>showslavestatus\G ***************************1.row*************************** Slave_IO_State:Waitingformastertosendevent主從配置成功! Master_Host:47.94.225.124 Master_User:rep Master_Port:3307 Connect_Retry:60 Master_Log_File:binlog.000003 Read_Master_Log_Pos:155 Relay_Log_File:c8661e16e3fd-mysql-slave-slave-1-relay-bin.000004 Relay_Log_Pos:363 Relay_Master_Log_File:binlog.000003 Slave_IO_Running:Yes Slave_SQL_Running:Yes Replicate_Do_DB: Replicate_Ignore_DB: 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:155 Relay_Log_Space:762 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:1 Master_UUID:a482f5fe-80fb-11e8-9fb1-0242ac12020c Master_Info_File:mysql.slave_master_info SQL_Delay:0 SQL_Remaining_Delay:NULL Slave_SQL_Running_State:Slavehasreadallrelaylog;waitingformoreupdates Master_Retry_Count:86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position:0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key:0 1rowinset(0.00sec) mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| +--------------------+ 4rowsinset(1.01sec) mysql>showdatabase; ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'database'atline1 mysql>showdatabases; +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |sys| |test| +--------------------+ 5rowsinset(0.00sec)
主從庫原理分析:
i/o線程去請求主庫的binlog,并將得到的binlog日志寫到relaylog(中繼日志)文件中;主庫會生成一個logdump線程,用來給從庫i/o線程傳binlog;
SQL線程,會讀取relaylog文件中的日志,并解析成具體操作,來實現主從的操作一致,而最終數據一致;
即:從庫IO線程請求->中繼日志->獲取binlog->從庫SQL線程,解析
參考:
https://docs.docker.com/ docker 官網文檔
https://blog.csdn.net/gf0515/article/details/80466213 Mac Navicat連接Docker MySql8.0
https://blog.csdn.net/qq_28804275/article/details/80891951 主從環境搭建
docker mysql Dockerfile mysql 開源鏡像Dockerfile及配置
https://www.cnblogs.com/Aiapple/p/5792939.html 主從復制原理、高可用分析
http://www.cnblogs.com/Aiapple/p/5793786.html 實戰
到此這篇關于Docker部署Mysql8.0的方法示例的文章就介紹到這了,更多相關Docker部署Mysql8.0內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/xsj34567/article/details/80940238