一、 圖

二、docker-compose
1 定義 Dockerfile
先定義一個 Dockerfile,我們可以從這個 Dockerfile 中構建一個自定義的鏡像,從而獲取到一個我們自定義的容器,
FROM centos:7
RUN yum install -y \
vim bash-com* openssh-clients openssh-server iproute cronie;\
yum group install -y "Development Tools";yum clean all;\
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV LANG=zh_CN.UTF-8
在上面的 Dockerfile 中,安裝的基本的軟體,和 sshd、crond 服務,
會支持 ssh 遠程連接、計劃任務、ip 命令 ,ss 命令, 還有開發工具,
2 定義 docker-compose
version: '3.8'
services:
slb:
build: .
image: centos7-sshd
privileged: true
command: /usr/sbin/init
hostname: slb
networks:
xiuyun_net:
tomcat1:
image: centos7-sshd
privileged: true
hostname: tomcat1.sharkyun.com
command: /usr/sbin/init
networks:
xiuyun_net:
tomcat2:
image: centos7-sshd
hostname: tomcat2.sharkyun.com
privileged: true
command: /usr/sbin/init
networks:
xiuyun_net:
mysql-master:
image: centos7-sshd
hostname: mysql-master.sharkyun.com
privileged: true
command: /usr/sbin/init
networks:
xiuyun_net:
mysql-slave:
image: centos7-sshd
hostname: mysql-slave.sharkyun.com
privileged: true
command: /usr/sbin/init
networks:
xiuyun_net:
ansible:
image: centos7-sshd
hostname: ansible.sharkyun.com
privileged: true
command: /usr/sbin/init
networks:
xiuyun_net:
networks:
xiuyun_net:
3 啟動
docker-compose up -d
三、實施步驟
1 Ansible 階段
1.1 安裝 阿里云的 epel 源
在 ansible 主機上執行
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
1.2 安裝 ansible
yum install ansible -y
1.3 設定不檢查其他主機的公鑰
在 ansible 主機上修改 檔案 /etc/ansible/ansible.cfg 中如下選項
[defaults]
host_key_checking = False
繼續在 ansible 主機上執行如下命令,創造自己的密鑰對
ssh-keygen -N '' -f ~/.ssh/id_rsa
1.4 建立 hosts 資產清單檔案
在 ansible 主機上創建檔案 hosts.ini ,并寫入如下內容
[nginx]
slb
[tomcat]
tomcat1
tomcat2
[mysql]
mysql-master
mysql-slave
1.5 給需要管理的機器設定 root 密碼
由于這里是使用容器作為虛擬機的,所以默認情況下,root 用戶沒有密碼,需要我們手動設定,
在宿主機上執行如下命令設定密碼
docker-compose exec 服務名稱 bash -c 'echo 密碼 | passwd root --stdin'
docker-compose exec slb bash -c 'echo upsa | passwd root --stdin'
docker-compose exec tomcat1 bash -c 'echo upsa | passwd root --stdin'
docker-compose exec tomcat2 bash -c 'echo upsa | passwd root --stdin'
docker-compose exec mysql-master bash -c 'echo upsa | passwd root --stdin'
docker-compose exec mysql-slave bash -c 'echo upsa | passwd root --stdin'
1.6 傳輸公鑰
以下操作在 ansible 主機上操作
send-pubkey.yml
---
- hosts: all
gather_facts: no
remote_user: root
vars:
ansible_ssh_pass: upsa
tasks:
- name: Set authorized key taken from file
authorized_key:
user: root
state: present
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
...
執行 playbook
ansible-playbook -i hosts.ini send-pubkey.yml
2 MySQL 階段
2.1 部署MySQL 并啟動 MySQL 服務
mysql/install-mysql.yml
---
- name: 安裝 mysql,并啟動服務
hosts: mysql
gather_facts: no
tasks:
- name: 安裝倉庫檔案
yum:
name: https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
state: present
- name: 禁用 MySQL 8.0 倉庫
ini_file:
path: /etc/yum.repos.d/mysql-community.repo
section: mysql80-community
option: enabled
value: '0'
- name: 啟用 MySQL 5.7 倉庫
ini_file:
path: /etc/yum.repos.d/mysql-community.repo
section: mysql57-community
option: enabled
value: '1'
- name: 安裝 mysql 社區版
yum:
name: mysql-community-server
state: present
- name: start mysql
service:
name: mysqld
state: started
...
執行 playbook
ansible-playbook -i hosts.ini mysql/install-mysql.yml
2.2 設定 MySQL root 用戶的密碼
找到密碼
grep password /var/log/mysqld.log
重新設定密碼
mysqladmin -uroot -p'找到的初始密碼' password '新密碼'
2.3 創庫、創表

創庫: db
create database db default charset utf8mb4 collate utf8mb4_general_ci;
創表: stu
create table db.stu(
id int auto_increment primary key,
name varchar(4),
age int,
phone char(11));
2.4 插入資料
insert into stu(name,age,phone)
values('王麻子',32,'13141098899'),
('九筒',32,'13721096541'),
('六子',18,'13139192657'),
('馬邦德',37,'15855996688');
2.5 查詢資料
-
查詢出 年齡大于 18 的學員姓名
-
統計出年齡 大于等于 32 的學員數量
-
統計出每個年齡段的學員數量–>需要用到分組查詢
-
統計出 年齡在 30 到 50 之間的學員資訊(id,name,age,phone)
-
查出年齡是 32 歲,并且電話號是13721096541 的學員姓名
1. 查詢出 年齡大于 18 的學員姓名
mysql> select name from db.stu where age > 18;
+-----------+
| name |
+-----------+
| 王麻子 |
| 九筒 |
| 馬邦德 |
+-----------+
3 rows in set (0.00 sec)
2. 統計出年齡 大于等于 32 的學員數量
mysql> select count(name) from db.stu where age >= 32;
+-------------+
| count(name) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)
mysql> select count(name) 數量 from db.stu where age >= 32;
+--------+
| 數量 |
+--------+
| 3 |
+--------+
1 row in set (0.00 sec)
3. 統計出每個年齡段的學員數量–>需要用到分組查詢
mysql> select age 年齡,count(age) 數量 from db.stu group by age;
+--------+--------+
| 年齡 | 數量 |
+--------+--------+
| 18 | 1 |
| 32 | 2 |
| 37 | 1 |
+--------+--------+
3 rows in set (0.00 sec)
假如希望按照數量進行排序
mysql> select age 年齡,count(age) 數量 from db.stu group by age order by 數量;
+--------+--------+
| 年齡 | 數量 |
+--------+--------+
| 18 | 1 |
| 37 | 1 |
| 32 | 2 |
+--------+--------+
3 rows in set (0.00 sec)
4. 統計出 年齡在 30 到 50 之間的學員資訊(id,name,age,phone)
mysql> select id,name,name,age,phone from db.stu where age between 30 a
nd 50;
+----+-----------+-----------+------+-------------+
| id | name | name | age | phone |
+----+-----------+-----------+------+-------------+
| 1 | 王麻子 | 王麻子 | 32 | 13141098899 |
| 2 | 九筒 | 九筒 | 32 | 13721096541 |
| 4 | 馬邦德 | 馬邦德 | 37 | 15855996688 |
+----+-----------+-----------+------+-------------+
3 rows in set (0.00 sec)
5. 查出年齡是 32 歲,并且電話號是13721096541 的學員姓名
mysql> select name from db.stu where age=32 and phone='13721096541';
+--------+
| name |
+--------+
| 九筒 |
+--------+
1 row in set (0.00 sec)
2.4 配置主從復制
2.4.1 修改主服務器的配置
在主服務上操作,設定二進制日志檔案資訊并開啟二進制日志
log-bin=/var/log/mysql/mysql-bin
server-id=1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
2.5 創建二進制日志檔案路徑,并授權
mkdir /var/log/mysql/
chown mysql.mysql /var/log/mysql
2.6 重啟 主服務器的 MySQL 服務
systemctl restart mysqld
2.7 在主服務上給從庫進行授權
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '密碼';
2.8 匯出主服務器目前的資料
mysqldump -uroot -p'密碼' --all-databases --master-data=1 > dbdump.db
2.9 將匯出的資料傳遞給從服務器
MySQL 的主服務器上執行
scp dbdump.db root@mysql-slave:/root/
2.10 將資料匯入到從服務器
在從服務器上操作
假如 從服務器的 root 初始密碼沒有修改,需要按照上面 master 提到的方法修改一下
在從服務器 /root/ 目錄下執行下面的命令
mysql -uroot -p'密碼' < dbdump.db
2.11 配置從服務器的 server-id
編輯 /etc/my.cnf 檔案,并添加如下內容
[mysqld]
server-id=2
2.12 重啟服務
systemctl restart mysqld
2.13 在從庫上配置主庫資訊
先查看二進制檔案的同步資訊
[root@mysql-master ~]# grep '^CHANGE' dbdump.db
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=437;
注意這里的二進制檔案名: mysql-bin.000003
位置: 437
登錄到 從庫設定連接到主機的資訊
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='密碼',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_AUTO_POSITION=1;
2.14 從服務器啟動 主從復制的行程
mysql> start slave;
2.15 查看是否成功
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: mysql-master
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 437
Relay_Log_File: mysql-slave-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
這樣是查看 IO 行程和 SQL 行程是否都是 OK
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262893.html
標籤:其他
上一篇:IDA靜態逆向分析工具詳解一
下一篇:TDH中的Transporter
