debian系統
安裝docker (參考網址:https://cloud.tencent.com/developer/article/1360720)
1、更新現有的包列表
sudo apt update
2、安裝一些允許apt使用包通過HTTPS的必備軟件包
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
3、將官方Docker存儲庫的GPG密鑰添加到您的系統
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
4、將Docker存儲庫添加到APT源:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
5、使用新添加的repo中的Docker包更新包數據庫
sudo apt update
6、確保您要從Docker repo而不是默認的Debian repo安裝:
apt-cache policy docker-ce
6、安裝Docker
apt install docker-ce
7、現在應該安裝Docker,守護進程啟動,並啟用進程啟動進程。檢查它是否正在運行:
systemctl status docker
8、拉取mysql指定版本鏡像(參考網址:https://www.cnblogs.com/xiaohanlin/p/10012730.html)
docker pull mysql:5.7.2
或者使用DockerFIle的方式
使用DockerFile創建mysql可以使用如下辦法
1 新建文件夾 dirName 2 在文件夾下添加mysql配置文件 mysqld.cnf 當然 也可以不用 3 4 添加DockerFile文件 5 添加內容 6 FROM mysql:5.7.22 7 COPY ["mysqld.cnf","/etc/mysql/mysql.conf.d/mysqld.cnf"] #也可以不加 8 EXPOSE 3306 9 10 執行命令 docker build -t mysql5.7.22:v0 . 創建本地鏡像 11 build 為創建本地鏡像 12 -t 指定鏡像的名字 13 : 指定標簽的名字 14 . 指定遠程服務器的對應文件位置 build 在創建鏡像的時候 實際上使用的是遠程的服務器(首先我們要理解 docker build 的工作原理。Docker 在運行時分為 Docker 引擎(也就是服務端守護進程)和客戶端工具。Docker 的引擎提供了一組 REST API,被稱為 Docker Remote API,而如 docker 命令這樣的客戶端工具,則是通過這組 API 與 Docker 引擎交互,從而完成各種功能。因此,雖然表面上我們好像是在本機執行各種 docker 功能,但實際上,一切都是使用的遠程調用形式在服務端(Docker 引擎)完成。也因為這種 C/S 設計,讓我們操作遠程服務器的 Docker 引擎變得輕而易舉。) 該命令 會將.的所有內容 上傳到遠程服務器,因此我們應當盡可能的使得所上傳的文件夾精簡,而DockerFile中的文件路徑,也應當正確對應。 15 以上文的COPY為例 是將本地當前文件夾的mysqld.cnf文件復制到所創建鏡像的/etc/mysql/mysql.conf.d/mysqld.cnf位置 並命名為mysqld.cnf,如果寫成COPY ["../mysqld.cnf","/etc/mysql/mysql.conf.d/mysqld.cnf"] 則在執行build命令的時候需要這么 16 寫(docker build -t mysql5.7.22:v0 ..),如此以來,就會將..文件夾(當前文件的上層文件夾的所有內容)傳到遠程服務器,鏡像無疑就會變得龐大臃腫。
9、啟動mysql容器
1 (此處使用宿主機的配置文件、存儲路徑和日記路徑啟動 需要自己創建、如果沒有指定的配置文件可使用 2 docker cp mysql5_7_22_1:/etc/mysql/mysql.conf.d/mysqld.cnf /etc/conf/mysql/ 3 mysql5_7_22_1為容器名 4 從容器拷貝一份到服務器)
1 docker run --name mysql5_7_22 -p 3306:3306 --restart=always -v /etc/conf/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /var/log/mysql/log/:/var/log/mysql -v /data/mysql/:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -d guodakai/mysql5.7.22:v0 2 -p 3306:3306 將容器的 3306 端口映射到主機的 3306 端口 (前面為宿主機,后面為容器) 3 --name 容器名(自己定義) 4 --restart=always 將容器設置為自啟 5 -v 將宿主機指定內容掛載到容器 6 --privileged= true 是我啟動mysql的時候發現mysql啟動不了,通過 docker logs命令查看,發現提示信息是:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied (docker logs -f mysql5_7_22 查看指定日志文件) 7 -e 初始化 root 用戶的密碼 8 -d 在后台運行容器 9 10 如果希望容器隨docker啟動而啟動 可添加 --restart=always 11 如果要設置已經啟動的容器可以使用一下命令 12 docker container update --restart=alway 容器名
10、進入容器
docker exec -it mysql5_7_22 bash
11、退出容器
exit
12、將其他服務器數據導入容器數據庫(兩者需要可以相互訪問、參考網址:https://www.cnblogs.com/osfipin/p/9927185.html)
1 mysqldump -uroot -proot --opt jupin_zhizuan | mysql --host=192.168.31.136 -uroot -proot -C jupin_zhizuan 2 --opt命令可選,建議加上。等同於指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以給出很快的轉儲操作並產生一個可以很快裝入MySQL服務器的轉儲文件。 3 -C 客戶端和服務器之間啟用壓縮傳遞所有信息。當然得要有咯。
13、添加主從服務 (舊方式)
修改/etc/mysql/mysql.conf.d/mysqld.cnf
1 主庫添加內容: 2 character-set-server=utf8 3 default-storage-engine=INNODB 4 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 5 6 server-id=1 7 log_bin=/var/log/mysql/binlog
1 從庫添加內容: 2 character-set-server=utf8 3 default-storage-engine=INNODB 4 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION 5 6 server-id=2 7 log_bin=/var/log/mysql/binlog 8 innodb_file_per_table=ON 9 skip_name_resolve=ON 10 binlog-format=row 11 log-slave-updates=true 12 relay_log=/var/log/mysql/relay.log
以下操作可以使用 navicat操作 (再此之情 需要先同步兩個數據庫的數據)
1 進入主庫 2 查詢主庫狀態 SHOW MASTER STATUS 3 進入從庫 4 停止從庫 stop slave; 5 配置主從連接 CHANGE MASTER TO MASTER_HOST='192.168.174.136',MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=154; 6 (MASTER_LOG_FILE,MASTER_LOG_POS 為主庫狀態的file 和 position) 7 啟動從庫 start slave;
!!!主從設置完成后 需要添加一些帳號 只讀等
!!!主從設置完成后 從庫掛掉后 重啟會自動將數據補全
//GTID主從配置(推薦) 參考網址:https://blog.51cto.com/7834466/2345202
1 主配置文件添加內容 2 [mysqld] 3 #GTID: 4 server_id=135 #服務器id 5 gtid_mode=on #開啟gtid模式 6 enforce_gtid_consistency=on #強制gtid一致性,開啟后對於特定create table不被支持 7 8 #binlog 9 log_bin=master-binlog 10 log-slave-updates=1 11 binlog_format=row #強烈建議,其他格式可能造成數據不一致 12 13 #relay log 14 skip_slave_start=1 #這一句可以不加 添加之后mysql重啟后從庫的slave不自動重啟
1 從庫的配置文件添加內容 2 [mysqld] 3 #GTID: 4 gtid_mode=on 5 enforce_gtid_consistency=on 6 server_id=143 7 8 #binlog 9 log-bin=slave-binlog 10 log-slave-updates=1 11 binlog_format=row #強烈建議,其他格式可能造成數據不一致 12 13 #relay log 14 skip_slave_start=1 #同上,這一句可以不加 添加之后mysql重啟后從庫的slave不自動重啟
今進入從庫
依次執行
1 stop slave; 2 CHANGE MASTER TO MASTER_HOST='192.168.1.135',MASTER_USER='repl',MASTER_PASSWORD='xxx', MASTER_PORT=3306,MASTER_AUTO_POSITION = 1; 3 start slave; 4 show slave status\G; 查看狀態
