LNMP架构部署
第1章 部署LNMP架构步骤
1.1 ①部署Linux系统(OK)
基本优化完成(ip地址设置 yum源更新 字符集设置)
安全优化完成(iptables关闭 selinux关闭 /tmp/ 1777)
1.2 ②部署nginx网站服务
A.安装软件依赖包
B.创建进程管理用户
C.下载nginx软件,进行编译安装(编译安装三步曲)
D.创建软链接文件
E.编写nginx配置文件
F.启动nginx服务
G.编写hosts解析文件,进行浏览器访问测试
第2章 ③部署mysql数据库服务(web服务器)
2.1 软件部署过程
A.下载mysql软件
mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz
B.二进制包方式安装mysql数据库软件
2.1.1 a.解压二进制包软件
cd /server/tools tar xf mysql-5.6.-linux-glibc2.-x86_64.tar.gz
2.1.2 b.创建mysql虚拟用户
useradd -s /sbin/nologin -M mysql
2.1.3 c.将解压后的二进制包放置到程序目录中
cd /server/tools mv mysql-5.6.-linux-glibc2.-x86_64 /application/mysql-5.6. ln -s /application/mysql-5.6./ /application/mysql
2.1.4 c.要对mysql数据存储目录data进行授权
chown -R mysql.mysql /application/mysql/data #这里也可以直接让用户直接管理mysql目录 ll /application/mysql/data/
2.1.5 e.初始化数据库服务
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql echo $?
提示:如何判定以上初始化命令执行成功
01.确认返回值
02.确认命令执行输出内容中,必须存在两个OK
03.通过数据库初始化操作,在data目录中创建出默认数据库信息和相关表信息
其中,查看初始化输出的内容
To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system
说明:mysql启动脚本默认在support-files/mysql.server,这里要复制mysql.server到系统启动目录
2.1.6 f.将启动脚本文件复制到启动目录中并授权
cp -a /application/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld
注意mysql相关文件:启动脚本/etc/init.d/mysqld 启动命令/application/mysql/bin/mysqld_safe
因为两文件中都存在mysql安装默认路径/usr/local/mysql,故这里进行同时修改,如下
2.1.7 g.修改启动脚本和mysql命令中的路径
sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld
2.1.8 h.复制mysql默认的服务配置文件
cp /application/mysql/support-files/my-default.cnf /etc/my.cnf
说明:mysql默认配置文件保存位置support-files/my-default.cnf,但my-default.cnf不能在mysql目录下配置,更改为/etc/my.cnf使系统能够识别mysql配置信息,且原有/etc/my.cnf与安装版本不同
2.1.9 i.启动mysql服务
/etc/init.d/mysqld start Starting MySQL.... SUCCESS! netstat -lntup|grep mysql tcp ::: :::* LISTEN /mysqld
说明:至此mysql数据库安装完成,可以检测进程和服务端口,确认服务是否启动正确
2.2 mysql管理讲解
2.2.1 01.进入与退出mysql数据库方法
/application/mysql/bin/mysql
退出数据库时,尽量不要用ctrl+c进行退出mysql ,使用ctrl+d进行退出
2.2.2 02.设置全局变量,便于登录数据库
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile which mysql
a.查看数据库信息
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ rows in set (0.13 sec)
b.查看数据表信息(二维表)
mysql> use mysql; #因为表属于库,故此处要具体到使用某一个数据库进行查看 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; #显示信息
2.2.3 03.设置mysql服务开机自启动
加入开机自启动
chkconfig --add mysqld chkconfig mysqld on
2.2.4 04.设置mysql数据库登录用户名与密码
给MySQL root用户设置密码
/application/mysql/bin/mysqladmin -u root password 'oldboy123' #本地设定密码,提示可忽略 mysql -u root -poldboy123 /application/mysql/bin/mysqladmin -u root -h web01 password 'oldboy123' #远端设定密码,择其一
2.3 常用命令参数说明
show databases; #<-查询默认的数据库信息
create database oldboy; #<-创建新的数据库
drop database oldboy; #<-删除存在的数据库
use mysql; #<-表示选择使用一个数据库,相当于cd进入一个数据库
show tables; #<-查看数据库中表信息
select database(); #<-表示查看当前所在数据库,类似于pwd命令的功能
select user(); #<-查看当前登录数据库的用户,类似于whoami命令
并且mysql还可以限制指定用户可以从哪里进行连接登录数据库
select * from user\G; #<-查看user表中所有信息,并且纵行显示
select user,host from user; #<-查看user表中指定信息,并且横行显示
select user,host from mysql.user; #<-查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库
grant all on *.* to user@'host' identified by 'oldboy123'; #<-创建用户
grant all on *.* to Old_Boy@'localhost' identified by 'oldboy123'; #<-创建用户(大写用户)
drop user 'user'@'host'; #<-删除用户及用户关联库
flush privileges; #<-刷新权限
初级 添加删除系列
create database wordpress; #<-创建数据库
drop database wordpress; #<-删除数据库
第3章 ④部署PHP动态解析服务
01.配置LNMP架构步骤
A.配置nginx配置文件
B.配置mysql数据库信息(SQL语句)
C.配置wordpress博客网站
02.架构服务器串联
a.数据库数据信息迁移(web服务器上的mysql数据迁移到10.0.0.51数据库服务器上)
b.将本地存储数据挂载到NFS共享存储服务器里(共享存储用户上传的数据信息)
3.1 PHP软件安装步骤
3.1.1 解决PHP软件的依赖关系
yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
# zlib压缩有关软件 libxml2字符集有关软件 libjpeg图片有关软件等
说明:由于libiconv-devel无法进行yum安装,故使用编译如下
3.1.1.1 libiconv-devel软件安装--字符集转换库
#和字符集转换的相关软件
mkdir -p /server/tools cd /server/tools #wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install cd ../
#和数据加密有关的三个软件
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #更改epel源 yum -y install libmcrypt-devel mhash mcrypt rpm -qa libmcrypt-devel mhash mcrypt
说明:此软件在centOS6.8之后,系统已经自带此软件功能,可以不进行安装
编译好的软件卸载方法:删除安装后的程序目录
FPM:rpm包制作软件---把编译后的程序目录进行打包,通过fpm指定rpm解压前要先安装哪些软件
自动化部署必备技能—定制化RPM包:http://blog.oldboyedu.com/autodeploy-rpm/
3.2 下载解压PHP软件
cd /server/tools/
tar xf php-5.5..tar.gz
cd php-5.5. ./configure \
--prefix=/application/php-5.5. \ #指定php软件安装位置
--with-mysql=/application/mysql \ #指定mysql软件安装位置 mysqlnd数据库服务没有安装在本地服务器上参数(web服务器视情况而定)
--with-pdo-mysql=mysqlnd \ #定义接口pdo
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \ #fpm要与wrapper程序对接,用户需一致
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no
说明:LNMP架构部署时,如果mysql服务和web服务不在一台主机上,php配置参数需要进行调整
--with-mysql=/application/mysql/ => --with-mysql=mysqlnd
3.2.1 防错步骤
ln -s /application/mysql/lib/libmysqlclient.so. /usr/lib64/ touch ext/phar/phar.phar #创建软链接生成目录 make make install
说明:此时/application下会生成程序文件信息
3.3 PHP软件程序创建软链接
ln -s /application/php-5.5./ /application/php
3.4 配置php解析文件/配置php-fpm配置文件
php服务拥有两个配置文件
01.php.ini
cd /server/tools/php-5.5. ll php.ini* -rw-r--r--. -- : php.ini-development #开发人员调试用配置文件 -rw-r--r--. -- : php.ini-production #生产常见所有配置文件
说明:文件比较命令vimdiff php.ini-development php.ini-production
php.ini-production 与 php.ini-development 文件区别关系对比:
① 生产文件:不会输出太多日志信息
② 开发文件:会输出大量程序测试日志信息
cp php.ini-production /application/php/lib/php.ini cd /application/php/etc/ cp php-fpm.conf.default php-fpm.conf
扩展命令:编译安装PHP时若配置未正确指定PHP进程用户信息,可以修改PHP文件进行调整
#sed -i 's#user = www#user = nginx#g;s#group = www#group = nginx#g' /application/php-5.5.32/etc/php-fpm.conf #忽略此步骤
3.5 启动php服务
/application/php/sbin/php-fpm lsof -i : #<-确认php 9000端口是否正确启动 ps -ef|grep php-fpm
第4章 wordpress博客站点部署配置
4.1 01.修改nginx配置文件,使nginx程序与php程序建立联系(fastcgi)
vim extra/blog.conf server { listen ; server_name blog.etiantian.org; location / { root html/blog; index index.php index.html index.htm; <--需要注意编辑修改默认首页文件 index index.php index.html index.htm; } location ~* .*\.(php|php5)?$ { #以php|php5结尾的动态资源访问文件交给php处理 root html/blog; fastcgi_pass 127.0.0.1:; #使用127.0.0./24本地网段建立互联 fastcgi_index index.php; include fastcgi.conf; } }
说明:利用nginx的location区块实现动态请求与静态请求的分别处理;让nginx服务具有动态请求解析功能 location ~* .*\.(php|php5)?$ 修改后==> location ~* (php|php5)$
4.2 ⭐02.编辑nginx与php连通性测试文件,并进行测试
测试动态请求是否可以处理前提:
01.必须要有动态资源文件php文件
cd /application/nginx/html/blog vim test_info.php <?php phpinfo(); ?>
说明:当php服务停止时,9000端口信息消失,即停止PHP错误报502错误
02.linux系统测试完毕后,建议利用浏览器进行最终测试,测试效果更明显些
客户端测试
curl http://blog.etiantian.org/index.html #<-静态请求站点文件信息测试 curl http://blog.etiantian.org/test_info.php #<-动态请求站点文件信息测试
浏览器测试
blog.etiantian.org #<-静态 blog.etiantian.org/test_info.php #<-动态
4.3 03.编辑php与mysql连通性测试文件,并进行测试
4.3.1 A.创建wordpress博客存储博客数据库
mysql -uroot -poldboy123; show databases; #<-查看当前数据库信息 create database wordpress;
4.3.2 B.创建数据库授权用户
grant all on wordpress.* to 'wordpress'@'10.0.0.%' identified by 'oldboy123'; flush privileges; #刷新mysql的系统权限相关表
#授权 所有权限 针对某一个库.表信息(这里即所有) 让哪些用户可以有此权限 允许哪些网段的主机可以连接到数据库上(%即网段,亦可定义具体地址) 定义数据库密码信息
4.3.2.1 查看用户信息
mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | wordpress | 10.0..% | | root | 127.0.0.1 | | root | :: | | | localhost | | root | localhost | | | web01 | | root | web01 | +-----------+-----------+ rows in set (0.00 sec)
4.3.2.2 其他信息说明
drop user wordpress@'172.16.1.8'; #<-删除用户信息
select user,host from mysql.user; #<-查看用户信息
mysql -uwordpress -p123456 #<-测试创建的用户连接
show databases; #<-查看当前数据库信息
利用mysql命令进行指定用户登录测试
/application/mysql/bin/mysql -uwordpress -poldboy123
4.3.3 C.测试php与数据库连通性
01.编写文件
cd /application/nginx/html/blog vim test_mysql.php <?php //$link_id=mysql_connect('主机名','用户','密码'); //mysql -u用户 -p密码 -h 主机 $link_id=mysql_connect('localhost','wordpress','oldboy123') or mysql_error(); if($link_id){ echo "mysql successful by oldboy !\n"; }else{ echo mysql_error(); } ?>
02.测试
curl blog.etiantian.org/test_mysql.php #<-xshell测试php与数据库的连通性 http://blog.etiantian.org/test_mysql.php #<-浏览器测试
4.4 04.下载部署wordpress博客程序
另外三个网站 bbs www blog
4.4.1 下载wordpress程序进行保存
说明:中文网站https://cn.wordpress.org/ 英文官网https://www.wordpress.org/
cd /server/tools/ wget https://cn.wordpress.org/wordpress-4.7.3-zh_CN.tar.gz
4.4.2 解压程序压缩包,将解压后程序代码复制到站点目录下
tar xf wordpress-4.7.-zh_CN.tar.gz mv wordpress/* /application/nginx/html/blog/
4.4.3 对站点目录进行授权
chown -R www.www /application/nginx/html/blog/
注意:统一目录下内容nginx用户管理,因为ps -ef|grep nginx显示nginx管理的用户是www。通过网站访问是以www用户,不修改则为root用户,用户没有写入权限
4.4.4 进行访问blog网站,完成初始化操作
连接数据库配置
数据库名:指定数据存储到哪一个数据库当中,如存储到wordpress数据库中
用户名:以什么用户身份管理wordpress数据库[不建议root权限过大]
密码:-
数据库主机:指定数据库所在的服务器地址信息[当nginx与数据库在同一台服务器上时,可以使用localhost]
表前缀:标识相应表属于哪一个数据库
注意:配置完数据连接信息后,浏览网页页面进行会自动生成WordPress基础配置文件,即/application/nginx/html/blog/ wp-config.php,此文件定义数据库连接配置参数选项。
第5章 wordpress博客站点数据库迁移(架构服务器串联)
5.1 迁移数据库:利用数据库备份命令(web服务器上的mysql数据迁移到数据库服务器上)
5.1.1 01.备份数据库中数据信息
/application/mysql/bin/mysqldump -uroot -poldboy123 --all-databases >/tmp/bak.sql #警告:在命令行界面使用密码可能不安全 ll /tmp/bak.sql -h scp /tmp/bak.sql 172.16.1.51:/tmp/
5.1.2 02.将备份数据传送到10.0.0.51服务器上,进行恢复
[root@web01 ~]# rsync -avz /tmp/bak.sql 172.16.1.51:/tmp/ [root@db01 ~]# ll /tmp
5.1.3 03.mysql服务器快速部署mysql过程
[root@db01 ~]# mkdir -p /server/tools #上传mysql压缩包
[root@db01 ~]# vim /server/scripts/mysql_conf.sh #解压mysql压缩包 cd /server/tools tar xf mysql-5.6.-linux-glibc2.-x86_64.tar.gz mkdir -p /application #将解压后的二进制包放置到程序目录中 mv mysql-5.6.-linux-glibc2.-x86_64 /application/mysql-5.6. ln -s /application/mysql-5.6./ /application/mysql #创建mysql虚拟用户 useradd -s /sbin/nologin -M mysql #对mysql数据存储目录进行授权 chown -R mysql.mysql /application/mysql/data #复制mysql默认的服务配置文件 cp /application/mysql/support-files/my-default.cnf /etc/my.cnf #初始化数据库服务 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql #将启动脚本文件复制到启动目录中 \cp -a /application/mysql/support-files/mysql.server /etc/init.d/mysqld #修改启动脚本和mysql命令中的路径 sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld #启动mysql服务 /etc/init.d/mysqld start
[root@db01 ~]# sh /server/scripts/mysql_conf.sh
5.1.3.1 数据恢复功能
[root@db01 ~]# /application/mysql/bin/mysqladmin -uroot password #mysql数据库设置密码 [root@db01 ~]# /application/mysql/bin/mysql -u root -poldboy123 </tmp/bak.sql
5.1.4 04.进行测试(在web01服务器上进行远程登录数据库)
启动数据库并查看数据库信息
/application/mysql/bin/mysql -u wordpress -poldboy123 -h 10.0.0.51#<--修改配置文件之前,先测试网站web服务器与迁移后的数据库连通性 show databases;
注意:页面出现"建立数据库连接时出错"
原因:服务停止;连接时出现问题
5.1.5 05.数据库迁移完毕,修改web服务php连接数据配置文件信息
cd /application/nginx/html/blog
vim wp-config.php #<--修改wordpress上的数据库连接参数信息 /** MySQL主机 */ define('DB_HOST', '10.0.0.51'); #<--修改连接的主机信息,将localhost修改为10.0.0.
说明:web服务器数据库此时可以关闭了
5.2 将本地存储数据挂载到NFS共享存储服务器上(共享存储用户上传的数据信息)
5.2.1 A.确认本地数据存储路径信息
01.通过查看网页图片属性信息进行确认路径
02.通过find查看数据存储路径信息
find . -type f -mmin -1
03.通过inotify软件进行监控
html/blog
5.2.2 B.将已有数据进行迁移备份
cd /application/nginx/html/blog/wp-content/uploads #数据库存储目录 mkdir /tmp/wordpress_backup -p mv ./* /tmp/wordpress_backup/
5.2.3 C.将存储目录挂载到nfs共享目录上
[root@nfs01 ~]# vim /etc/exports /backup 172.16.1.0/(rw,sync,all_squash) showmount -e 172.16.1.31 [root@web01 ~]# mount -t nfs 172.16.1.31:/backup /application/nginx/html/blog/wp-content/uploads/ mv /tmp/wordpress_backup/* /application/nginx/html/blog/wp-content/uploads/
说明:/etc/exports若未设置all_squash,则无法向共享目录中写入数据,需要调整nfs服务配置
01.修改映射参数
vim /etc/exports no_all_squash ==> all_squash
02.修改共享目录为指定默认映射用户-www
#保持web服务器同nfs的用户uid gid一致
usermod -u xxx www groupmod -g xxx www
vim /etc/exports anonuid=xxx,anongid=xxx #<-xxx值: uid及gid
此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创作品允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明,否则将追究法律责任。http://www.cnblogs.com/bananaaa/
LNMP架构部署的更多相关文章
- 用lnmp架构部署wordpress网站详细步骤
用lnmp架构部署wordpress网站 ①.下载和上传网站代码 用winscp或者xftp, 或者xshell下执行rz命令进行上传网站的包文件. ②.解压程序代码,并将程序代码保存到站点目录,并进 ...
- 《Linux就该这么学》培训笔记_ch20使用LNMP架构部署动态网站环境
<Linux就该这么学>培训笔记_ch20使用LNMP架构部署动态网站环境 文章最后会post上书本的笔记照片. 文章主要内容: 源码包程序 LNMP动态网站架构 配置Mysql服务 配置 ...
- linux运维、架构之路-Lnmp架构部署
一.Lnmp架构原理 二. Lnmp架构软件安装 1.Nginx安装脚本 #!/bin/bash useradd -s /sbin/nologin -M www mkdir -p /server/to ...
- 第20章 使用LNMP架构部署动态网站环境
章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...
- 原创:LNMP架构部署个人博客网站 禁止转载复制
nginx编译安装步骤 ①. 检查软件安装的系统环境 cat /etc/redhat-release uname -r ②. 安装nginx的依赖包(pcre-devel openssl-devel) ...
- Lnmp架构部署动态网站环境.2019-7-2-1.1
一.Mysql简介 Mysql数据库: 1.社区版 2.商业版 3.cluster集群 Mysql安装方式 1.编译安装 2.yum/rpm 3.二进制包,直接解压,无需编译 二.Mysql安装部署 ...
- Lnmp架构部署动态网站环境.2019-7-3-1.4
安装wiki开源产品 一.创建数据库 [root@Lnmp bbs]# mysql -uroot -p123456 mysql> create database wiki; #创建wiki数据库 ...
- Lnmp架构部署动态网站环境.2019-7-3-1.3
Php安装 一.安装准备 1.Php依赖包 [root@Lnmp tools]# yum install -y zlib libxml libjpeg freetype libpng gd curl ...
- Lnmp架构部署动态网站环境.2019-7-3-1.2
Nginx安装 一.安装准备 Pcre(Perl Compatible Regular Expressions,兼容正则表达式)安装pcre库是为了使Nginx支持HTTP Rewrite模块. 安装 ...
随机推荐
- Next Greater Element I
You are given two arrays (without duplicates) nums1 and nums2 where nums1's elements are subset of n ...
- input输入中文时,拼音在输入框内会触发input事件的问题。
问题描述: 监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中(选词)时会触发input事件,如图: 需要完成的需求就是在输入阶段不触发input中的事件,选词之后文字落 ...
- ThinkPHP中使用PHPMailer邮件类
第一步.添加PHPMailer类库将下载后的文件解压,将PHPMail目录移动至ThinkPHP目录中的Vendor内.(请确保class.phpmailer.php文件就在ThinkPHP\Vend ...
- 像 npm 一样在 Andriod 项目中引入 Gradle 依赖
一.前言 作为 Android 开发人员,有没有羡慕过 node.js 的导入三方库的方式,node.js 社区为开发者准备了一个快速可靠的依赖管理库.这样的依赖管理库,让 node.js 导入依赖库 ...
- zoj 2136 Longest Ordered Subsequence 最长上升子序列 新思路
Longest Ordered Subsequence Time Limit: 2 Seconds Memory Limit: 65536 KB A numeric sequence of ...
- asp.net微软图表控件使用示例
<configuration> <system.webServer> <handlers> <remove name="ChartImageHand ...
- SAP 月结F.19与GR/IR
http://blog.sina.com.cn/s/blog_3eeba40101008v75.html 为什么要做月结?月结究竟都结些啥? 月结的目的和手段都不知道,只知道一部分.月结,为了出资产负 ...
- Mysql数据库导出数据字典文档Word或者HTML的3个工具
最近需要将Mysql的数据库导出一份Word的文档出来,本文记录调研后几个可用的工具和方法: 阿里云DMS工具导出 适用于存储在阿里云RDS服务中的Mysql数据库 导出格式支持:Word.Excel ...
- win10 UWP 隐式转换
implicit operator string <script type="text/javascript"> $(function () { $('pre.pret ...
- R学习笔记 第二篇:矩阵、数组和列表
向量是一维的,只有长度(行),没有其他维度.R中存在更高维度的对象,他们是矩阵,数据框,数组.这些对象的下标都是使用中括号[],第一个维度是row,第二个维度是column,依次类推,[row,col ...