?客戶需在國產化銀河麒麟系統中部署軟件應用,使用mysql8.0數據庫。機器放置了兩三年,里面命令工具和依賴都不太全。而且客戶環境不聯網,只能采用離線部署的方式。部署過程中踩了很多坑,也用到很多資源,記錄一下。
過程概述
最開始從mysql官網下載了arm版本的安裝包,但是服務器缺少的依賴太多了。我們連續裝了兩個依賴之后發現這是個無底洞……遂更換為docker拉包的方式部署。
資源準備
1、docker安裝包,準備docker-20.10.9.tgz文件包,適用于arm架構的相近版本都可以。可以從本文頂部鏈接下載,也可以自行準備。
2、mysql鏡像包,從網上下載一個同樣適用于arm架構的mysql8.tar包。
安裝步驟
部署docker
1、解壓安裝包:
tar -xvf docker-20.10.9.tgz #(改成自己的版本)
2、將解壓出來的docker文件內容移動到 /usr/bin/ 目錄下
mv docker/* /usr/bin/
3、將docker注冊為service服務
vi /etc/systemd/system/docker.service
編輯docker.service文件的內容:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
4、啟動docker
chmod +x /etc/systemd/system/docker.service #設置權限
systemctl daemon-reload
systemctl start docker #啟動Docker
如果需要設置自啟或查看docker狀態或日志,可參考以下命令:
systemctl enable docker.service #設置開機自啟
systemctl status docker #查看Docker狀態
docker -v #查看Docker版本
journalctl -u docker.service #查看詳細日志
上傳mysql鏡像
1、將mysql8.tar上傳到服務器,并拉取鏡像
docker load -i 路徑/mysql8.tar #改成存放路徑
2、修改my.cnf文件
vi /etc/my.cnf
內容按需配置
[mysqld]
datadir=數據目錄/data
port=3306
innodb_buffer_pool_size=2047M
character-set-server=utf8
max_length_for_sort_data = 8388608
join_buffer_size=1048576
sort_buffer_size =3145728
read_rnd_buffer_size = 838860800
#default-storage-engine=MyISAM
default-storage-engine=Innodb
max_allowed_packet=1073741824
wait_timeout=2147483
interactive_timeout=2880000
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_strict_mode = 0
[client]
port=3306
3、配置參數并啟動容器,主要修改配置文件路徑映射、端口映射,主機的路徑、端口在冒號前,容器的路徑、端口在冒號后。
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -v /path/to/my.cnf:/etc/mysql/my.cnf -v /path/to/data:/var/lib/mysql -p 3306:3306 -d 鏡像id #自行修改
4、查看mysql是否啟動成功:
進入容器,使用mysql -uroot -p密碼,看看是否輸出連接成功信息。
5、初始化數據庫,使應用可以連接數據庫而非本地連接,請參考此文章后半部分初始化數據庫部分:在同一臺主機上運行MySQL和MariaDB
配置宿主機上應用的JDBC
jdbc:mysql://localhost:3306/數據庫名?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
這里的ip就是localhost,因為容器和宿主機是一個網,不用修改。
啟動應用,連接成功。
中途遇到的問題
1、權限不夠
我使用非root用戶登錄的,su -root登錄不成功。最后使用
sudo su
輸入當前用戶密碼后切換到了root用戶。
2、運行權限不夠
./startup.sh(程序)
運行應用程序過程中總是報permission denied,最后使用
sudo bash startup(程序名)
成功運行。
3、使用rpm提示功能不存在
銀河麒麟系統和ubuntu比較接近,可使用
dpkg -l | grep mysql
查詢系統中是否之前安裝過mysql