mysqlip存儲
㈠ Mysql存放IP地址 用數值型有什麼好處
大哥,你語法都錯了 insert into table_name values(),(),(); 一般mysql存儲ip用int型,int(10); inet_aton(ip)函數可以把ip欄位轉換為對應的整數存儲 INET_NTOA可以把整數轉換成ip欄位
㈡ k8s中的Mysql資料庫持久化存儲
一、配置:
環境:
CentOS7
VMware
筆者配置了四台虛擬機:
K8S-Master節點: 3GB內存 2核CPU 20GB硬碟空間
K8S-node1節點: 2GB內存 2核CPU 30GB硬碟空間
K8S-node2節點: 2GB內存 2核CPU 30GB硬碟空間
鏡像倉庫節點: 2GB內存 2核CPU 50GB硬碟空間
二、節點規劃:
使用三台虛擬機搭建K8S集群,使用一台虛擬機搭建鏡像倉庫。
每台虛擬機配置兩塊網卡,其中一塊為「NAT模式」,用於拉取鏡像等功能。
另外一塊網卡為「僅主機模式」,用於集群節點間的通信。歸劃如下:
K8s-master節點:
僅主機模式:10.10.10.200
NAT模式: 192.168.200.130
K8S-node1節點:
僅主機模式:10.10.10.201
NAT模式: 192.168.200.131
K8S-node2節點:
僅主機模式:10.10.10.202
NAT模式: 192.168.200.132
鏡像倉庫節點:
僅主機模式:10.10.10.101
NAT模式: 192.168.200.150
三、版本信息
Linux內核版本:
Linux version 3.10.0-862.el7.x86_64 ([email protected])
(gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) )
#1 SMP Fri Apr 20 16:44:24 UTC 2018
K8s集群版本為1.15.0版本:
四、基於StatefulSet與PV/PVC的MySql持久化存儲實驗
1. 在每個節點安裝nfs服務
在「鏡像倉庫」節點,執行以下命令:
yum install -y nfs-common nfs-utils rpcbind
在k8s集群,執行以下命令:
yum install -y nfs-utils rpcbind
2. 在「鏡像倉庫」節點下,配置nfs伺服器
mkdir /nfs_mysql
Chmod 777 /nfs_mysql/
(在測試環境中,為了不考慮用戶屬性,暫時賦予777許可權,但在生產環境不推薦這樣做)
Chown nfsnobody /nfs_mysql/
echo 「/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)」 >> /etc/exports
cat /etc/exports
/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)
systemctl start rpcbind
systemctl start nfs
3. 測試nfs服務是否可用
mkdir /test
showmount -e 10.10.10.101
可見/nfs_mysql *已暴露於共享目錄,接下來測試掛載是否可用:
在master節點下執行:
mount -t nfs 10.10.10.101:/nfs_mysql /test/
echo "hello-world">>/test/1.txt
在鏡像倉庫節點下查看1.txt是否存在,若存在則掛載成功:
可見nfs服務可以正常使用,接下來刪除test目錄和1.txt
在鏡像倉庫下:
[root@hub nfs_mysql]# rm -f 1.txt
在Master節點下:
[root@k8s-master ~]# umount /test/
[root@k8s-master ~]# rm -rf /test/
同理,依照以上步驟同時創建:(提供多個mysql副本進行掛載)
nfs_mysql1
nfs_mysql2
完成後需要重啟nfs服務
systemctl restart rpcbind
systemctl restart nfs
最終效果:
4. 將nfs封裝成pv
創建mysql_test文件夾,將yaml文件統一保存在此目錄下
mkdir mysql_test
cd mysql_test
vim mysql-pv.yml
mysql-pv.yml配置如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs_mysql
server: 10.10.10.101
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs_mysql1
server: 10.10.10.101
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv2
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs_mysql2
server: 10.10.10.101
注意:
在k8s集群15版本中recycle回收策略已被刪除,只能用retain策略或者Delete策略。這里我們使用 persistentVolumeReclaimPolicy: Retain
執行命令:
kubectl create -f mysql-pv.yml
kubectl get pv
如圖所示,即為Pv創建成功。
5. 部署MySQL,在mysql_test目錄下編寫mysql.yml,配置文件如下
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 3306
name: mysql
clusterIP: None
selector:
app: mysql
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql"
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "nfs"
resources:
requests:
storage: 1Gi
執行以下命令,部署mysql服務:
kubectl create -f mysql.yml
如圖可知,mysql按StatefulSet依次創建了mysql-0 mysql-1 mysql-2
查看各個Pod部在哪個節點:
6. 通過創建臨時容器,使用MySQL客戶端發送測試請求給MySQL master節點
注意:
主機名為mysql-0.mysql;跨命名空間的話,主機名請使用mysql-0.mysql. [NAMESPACE_NAME].如果沒有指定命名空間,默認為default,即 mysql-0.mysql. default。
這里筆者打算關閉node2節點來模擬node2宕機,來測試是否實現數據的持久化存儲,
所以我們向node2上的mysql1寫入數據。
執行以下命令,訪問mysql1:
kubectl run mysql-client --image=mysql:5.6 -it --rm --restart=Never -- mysql -h mysql-1.mysql.default -p password
創建資料庫demo,並向messages表中寫入hello-world
CREATE DATABASE demo;
CREATE TABLE demo.messages (message VARCHAR(250));
INSERT INTO demo.messages VALUES ('hello-world');
如圖所示
接下來我們來關閉k8s-node2虛擬機,模擬宕機
查看nodes的運行狀態,可知node2的狀態已轉變為NotReady
一段時間後,k8s將Pod MySql -1遷移到節點k8s-node1
由於時間過長,筆者把三個Pod都刪除重啟後,驗證數據:
MySQL服務恢復,數據完好無損!
㈢ IP地址存儲在mysql中用什麼欄位
用char()類型,因為IP地址基本定長,如114.114.114.114,為15個字元,最少也是如8.8.8.8,為7個字元,但非常少用這樣的IP,一般過都是12-15個字元長度,用varchar()變長類型的話會因此減慢資料庫速度
㈣ 請問怎麼用php來實現去獲取某個用戶的ip然後存到自己的資料庫mysql中,給代碼參考看看,謝謝
1.改表法。可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改
"mysql"
資料庫中
"user"
表裡的
"host"
欄位,把"localhost"改稱"%",即可。
mysql
-u
root
-pvmwaremysql>use
mysql;mysql>update
user
set
host
=
'%'
where
user
=
'root';mysql>select
host,
user
from
user;
2.授權法。例如,你想用戶myuser使用密碼mypassword通過ip地址連接到mysql伺服器,使用:
grant
all
privileges
on
*.*
to
'myuser'@'%'
identified
by
'mypassword'
with
grant
option;
如果你想允許用戶myuser從ip為192.168.1.3的主機連接到mysql伺服器,並使用mypassword作為密碼
grant
all
privileges
on
*.*
to
'myuser'@'192.168.1.3'
identified
by
'mypassword'
with
grant
option;
㈤ mysql ip欄位是varbinary(4) php如何向里存放數據
IP欄位一般使用INT存儲,銷量比較高。畢竟MySQL提供了IP地址轉換函數。
inet_aton:將ip地址轉換成數字型 inet_ntoa:將數字型轉換成ip地址