date 20131005
参考
http://chenzehe.iteye.com/blog/1266260
官方文档

http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#multiple-servers
5.12. 在同一台机器上运行多个MySQL服务器
http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#mysqld-multi
5.1.5. mysqld_multi:管理多个MySQL服务器的程序

注意:mysqld_multi 是perl写的脚本 需要安装perl

mysqld_multi 配置MySQL多实例

工作中吸取的
关闭时候 需要密码

一、配置说明
1、至少下面选项对每个服务器必须不同的
--port=port_num
-port控制着TCP/IP连接的端口号
--socket=path
--socket控制Unix中的Unix套接字文件路径和在Windows中的命名管道名称。
--pid-file=path
该选项只在Unix中使用。它指出服务器在其中写入进程ID的文件名。
如果你使用下面的日志文件选项,对于每个服务器来说,它们必须是不同的:
如果你使用下面的日志文件选项,对于每个服务器来说,它们必须是不同的:
--log=path
--log-bin=path
--log-update=path
--log-error=path
--bdb-logdir=path

为了提高性能,你可以为每个服务器指定下面选项的不同的值,以便在物理磁盘之间平均分配负荷:
--tmpdir=path
--bdb-tmpdir=path

一般情况,每个服务器应还使用不同的数据目录,可以通过--datadir=path选项来指定。

如果在不同的位置有多个MySQL的安装,一般情况可以用--basedir=path选项为每个服务器指定基本安装目录

指定不同Socket和Port的方式
1)编译时指定
shell> ./configure --with-tcp-port=port_number \
--with-unix-socket-path=file_name \
--prefix=/usr/local/mysql-5.1.2-alpha
shell> mysqladmin --host=host_name --port=port_number variables

2)启动时指定端口和套接字文件
如果只是用一个不同的Unix套接字文件和TCP/IP端口号启动,不必编译新的MySQL服务器。还可以在运行时指定这些值。这样做的一个方法是使用命令行选项:
shell> mysqld_safe --socket=file_name --port=port_number
要启动第二个服务器,提供不同的--socket和--port选项值,并且传递一个--datadir=path选项给mysqld_safe,以便服务器使用一个不同的数据目录。
达到相似效果的另一个方法是使用环境变量来设置 Unix套接字文件名和TCP/IP端口号:
shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> mysql_install_db --user=mysql
shell> mysqld_safe --datadir=/path/to/datadir &
这是一个快速启动第二个服务器以用于测试的方法。该方法的最大好处是环境变量设定值适用于你从相同的shell调用的任何客户端程序。因而,那些客户端连接自动指向第二个服务器!

二、配置文件范例
通过# mysqld_multi --example 可以获得范例
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass

#确保停止mysqld服务器(用mysqladmin程序)的MySQL账户在各个服务器中的用户名和密码相同。并且应确保账户具有SHUTDOWN权限。
#如果你想要管理的服务器的管理账户有许多不同的用户名或密码,你需要在每个服务器上创建一个账户,并具有相同的用户名和密码。
#例如,你可以执行下面的命令为每个服务器设置一个普通multi_admin账户:
#shell> mysql -u root -S /tmp/mysql.sock -proot_password
#mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';

[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/share/mysql/english
user = john

[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/share/mysql/swedish
user = monty

[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/share/mysql/estonia
user = tonu

[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user = jani

三、在多服务器环境中使用客户端程序
1、指定port方式
-P port
2、指定socket文件
-S 文件路径

四、实际操作
(一)使用同一个mysql-server版本的多个实例

1、安装软件
yum -y install mysql-server perl

2、规划多个实例
数据存放目录
开发
mkdir -p /mysql/dev/data02
mkdir -p /mysql/dev/data12
对应端口 3302 3312
mkdir -p /mysql/dev/data03
mkdir -p /mysql/dev/data13
对应端口 3303 3313
测试
mkdir -p /mysql/beta/data07
mkdir -p /mysql/beta/data17
mkdir -p /mysql/beta/data08
mkdir -p /mysql/beta/data18

LOG存放目录
mkdir -p /data/logs/mysql/dev
mkdir -p /data/logs/mysql/beta

2、修改配置文件
# cp /etc/my.cnf /etc/my_bak_20131015.cnf

测试只配置dev2个实例
# /usr/bin/mysqld_multi --example > /etc/my.cnf
产生例子文件,再修改

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = multi_admin
password = my_password

[mysqld2]
bind-address = 192.168.168.105
port = 3302
server-id = 33302
datadir = /mysql/dev/data02

log-error = /data/logs/mysql/dev/mysql_error_3302.log
long_query_time = 1
slow-query-log-file = /data/logs/mysql/dev/mysql_slow_3302.log
pid-file = /mysql/dev/data02/mysql.pid
socket = /mysql/dev/data02/mysql.sock

[mysqld12]
bind-address = 192.168.168.105
port = 3312
server-id = 33312
datadir = /mysql/dev/data12

log-error = /data/logs/mysql/dev/mysql_error_3312.log
long_query_time = 1
slow-query-log-file = /data/logs/mysql/dev/mysql_slow_3312.log
pid-file = /mysql/dev/data12/mysql.pid
socket = /mysql/dev/data12/mysql.sock

3、初始化
mysql_install_db --datadir=/mysql/dev/data02 --user=mysql
mysql_install_db --datadir=/mysql/dev/data12 --user=mysql

[root@teplate dev]# mysql_install_db --datadir=/mysql/dev/data02 --user=mysql
Neither host 'teplate.localdomain' nor 'localhost' could be looked up with
/usr/bin/resolveip
Please configure the 'hostname' command to return a correct
hostname.
If you want to solve this at a later stage, restart this script
with the --force option
# vim /etc/hosts
192.168.168.105 teplate.localdomai
添加了也不行
使用--skip-name-resolve也不行

--force Causes mysql_install_db to run even if DNS does not
work. In that case, grant table entries that normally
use hostnames will use IP addresses.
# mysql_install_db --datadir=/mysql/dev/data02 --user=mysql --force
Installing MySQL system tables...
OK
Filling help tables...
OK

4、启动
# mysqld_multi start 2
# ps xua|grep mysql
root 2136 0.8 0.1 5036 1332 pts/0 S 00:49 0:00 /bin/sh /usr/bin/mysqld_safe --bind-address=192.168.168.105 --port=3302 --server-id=33302 --datadir=/mysql/dev/data02 --log-error=/data/logs/mysql/dev/mysql_error_3302.log --long_query_time=1 --slow-query-log-file=/data/logs/mysql/dev/mysql_slow_3302.log --pid-file=/mysql/dev/data02/mysql.pid --socket=/mysql/dev/data02/mysql.sock --skip-name-resolve
mysql 2249 4.0 1.5 124992 16144 pts/0 Sl 00:49 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/mysql/dev/data02 --user=mysql --bind-address=192.168.168.105 --server-id=33302 --long_query_time=1 --slow-query-log-file=/data/logs/mysql/dev/mysql_slow_3302.log --skip-name-resolve --log-error=/data/logs/mysql/dev/mysql_error_3302.log --pid-file=/mysql/dev/data02/mysql.pid --socket=/mysql/dev/data02/mysql.sock --port=3302

[root@teplate dev]# ll /mysql/dev/data02 -h
total 21M
-rw-rw----. 1 mysql mysql 10M Oct 6 00:49 ibdata1
-rw-rw----. 1 mysql mysql 5.0M Oct 6 00:49 ib_logfile0
-rw-rw----. 1 mysql mysql 5.0M Oct 6 00:49 ib_logfile1
drwx------. 2 mysql root 4.0K Oct 6 00:48 mysql
-rw-rw----. 1 mysql mysql 5 Oct 6 00:49 mysql.pid
srwxrwxrwx. 1 mysql mysql 0 Oct 6 00:49 mysql.sock
drwx------. 2 mysql root 4.0K Oct 6 00:48 test
另外一个实例
# mysqld_multi start 12
# ps xua|grep mysql |grep 3312
root 2273 0.5 0.1 5036 1332 pts/0 S 00:50 0:00 /bin/sh /usr/bin/mysqld_safe --bind-address=192.168.168.105 --port=3312 --server-id=33312 --datadir=/mysql/dev/data12 --log-error=/data/logs/mysql/dev/mysql_error_3312.log --long_query_time=1 --slow-query-log-file=/data/logs/mysql/dev/mysql_slow_3312.log --pid-file=/mysql/dev/data12/mysql.pid --socket=/mysql/dev/data12/mysql.sock --skip-name-resolve
mysql 2386 2.2 1.5 124992 16148 pts/0 Sl 00:50 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/mysql/dev/data12 --user=mysql --bind-address=192.168.168.105 --server-id=33312 --long_query_time=1 --slow-query-log-file=/data/logs/mysql/dev/mysql_slow_3312.log --skip-name-resolve --log-error=/data/logs/mysql/dev/mysql_error_3312.log --pid-file=/mysql/dev/data12/mysql.pid --socket=/mysql/dev/data12/mysql.sock --port=3312
# ll /mysql/dev/data12 -h
total 21M
drwxr-xr-x. 2 mysql mysql 4.0K Oct 5 19:35 binlogs
-rw-rw----. 1 mysql mysql 10M Oct 6 00:50 ibdata1
-rw-rw----. 1 mysql mysql 5.0M Oct 6 00:50 ib_logfile0
-rw-rw----. 1 mysql mysql 5.0M Oct 6 00:50 ib_logfile1
drwx------. 2 mysql root 4.0K Oct 6 00:48 mysql
-rw-rw----. 1 mysql mysql 5 Oct 6 00:50 mysql.pid
srwxrwxrwx. 1 mysql mysql 0 Oct 6 00:50 mysql.sock
drwx------. 2 mysql root 4.0K Oct 6 00:48 test

5、客户端链接

1)socket文件方式
设置root密码
# mysqladmin -S /mysql/dev/data02/mysql.sock password 'mysqlmulti' -uroot -p
# mysqladmin -S /mysql/dev/data12/mysql.sock password 'mysqlmulti' -uroot -p

# mysql -S /mysql/dev/data02/mysql.sock -uroot -pmsyqlmulti

2)ip+port
# netstat -antlp |grep 33
tcp 0 0 192.168.168.105:3312 0.0.0.0:* LISTEN 2386/mysqld
tcp 0 0 192.168.168.105:3302 0.0.0.0:* LISTEN 2249/mysqld
# mysql -h192.168.168.105 -P3302 -uroot -pmysqlmulti
ERROR 1130 (HY000): Host '192.168.168.105' is not allowed to connect to this MySQL server
没有想明白

原因
因为--skip-name-resolve 所以在服务器里默认teplate.localdomain和localhost不会解析,解释解析也是127.0.0.1
授权给192.168.168.105即可
mysql> grant all on *.* to 'root'@'192.168.168.105' identified by 'mysqlmulti'
# mysql -h192.168.168.105 -P3302 -uroot -pmysqlmulti -e"show databases;"

6 设置关闭服务密码
关闭服务需要有权限的密码,开启服务不需要
1)创建账号
mysql -S /mysql/dev/data02/mysql.sock -uroot -pmysqlmulti -e"GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';"
因为服务绑定了ip,所以用localhost权限不能关闭,实验验证确实不能关闭
mysql -S /mysql/dev/data02/mysql.sock -uroot -pmysqlmulti -e"GRANT SHUTDOWN ON *.* TO 'multi_admin'@'192.168.168.105' IDENTIFIED BY 'multipass';"
使用关闭的账号密码
使用
每次关闭输入使用
# mysqld_multi stop --user=multi_admin --password=my_password
放入配置文件使用
# vim /etc/my.cnf
[mysqld_multi]
下添加
user = multi_admin
password = my_password
上面创建的账号,关闭服务没成功 原因权限

如果不想单独建账号直接使用root也可以
# mysqld_multi stop 2 --password=mysqlmulti
root账号放入配置

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
password = mysqlmulti

# mysqld_multi stop 2
# mysqld_multi stop 12
# ps xua|grep mysql

这样不用命令行每次都输密码了

7、全局参数和局部实例参数
放入[mysqld_multi] [mysqld]的参数是全局参数 每个实例可以继承和重载。
1)、全局测试
比如user和password 全局
测试几个参数,增加
[mysqld]
skip-name-resolve
log-bin = mysql-bin
relay-log = mysql-relay-bin
innodb_data_file_path = ibdata1:100M;ibdata2:100M:autoextend
innodb_log_file_size = 50M
innodb_lock_wait_timeout = 500

清除前面的数据重新初始化
# mysql_install_db --datadir=/mysql/dev/data02 --user=mysql --force
# mysql_install_db --datadir=/mysql/dev/data12 --user=mysql --force
# mysqld_multi start 2
# mysqld_multi start 12

[root@teplate dev]# ll /mysql/dev/data02 -h
total 301M
-rw-rw----. 1 mysql mysql 100M Oct 6 01:53 ibdata1
-rw-rw----. 1 mysql mysql 100M Oct 6 01:53 ibdata2
-rw-rw----. 1 mysql mysql 50M Oct 6 01:53 ib_logfile0
-rw-rw----. 1 mysql mysql 50M Oct 6 01:53 ib_logfile1
drwx------. 2 mysql root 4.0K Oct 6 01:51 mysql
-rw-rw----. 1 mysql mysql 20K Oct 6 01:51 mysql-bin.000001
-rw-rw----. 1 mysql mysql 740K Oct 6 01:51 mysql-bin.000002
-rw-rw----. 1 mysql mysql 106 Oct 6 01:53 mysql-bin.000003
-rw-rw----. 1 mysql mysql 57 Oct 6 01:53 mysql-bin.index
-rw-rw----. 1 mysql mysql 5 Oct 6 01:53 mysql.pid
srwxrwxrwx. 1 mysql mysql 0 Oct 6 01:53 mysql.sock
drwx------. 2 mysql root 4.0K Oct 6 01:51 test

# ll /mysql/dev/data12 -h
total 301M
-rw-rw----. 1 mysql mysql 100M Oct 6 01:53 ibdata1
-rw-rw----. 1 mysql mysql 100M Oct 6 01:53 ibdata2
-rw-rw----. 1 mysql mysql 50M Oct 6 01:53 ib_logfile0
-rw-rw----. 1 mysql mysql 50M Oct 6 01:53 ib_logfile1
drwx------. 2 mysql root 4.0K Oct 6 01:51 mysql
-rw-rw----. 1 mysql mysql 20K Oct 6 01:51 mysql-bin.000001
-rw-rw----. 1 mysql mysql 740K Oct 6 01:51 mysql-bin.000002
-rw-rw----. 1 mysql mysql 106 Oct 6 01:53 mysql-bin.000003
-rw-rw----. 1 mysql mysql 57 Oct 6 01:53 mysql-bin.index
-rw-rw----. 1 mysql mysql 5 Oct 6 01:53 mysql.pid
srwxrwxrwx. 1 mysql mysql 0 Oct 6 01:53 mysql.sock
drwx------. 2 mysql root 4.0K Oct 6 01:51 test

文件大小和全局设置的一样

查看其他设置
## mysqladmin -S /mysql/dev/data12/mysql.sock -uroot variables |grep innodb_lock_wait_timeout
| innodb_lock_wait_timeout | 500
# mysqladmin -S /mysql/dev/data02/mysql.sock -uroot variables |grep innodb_lock_wait_timeout
| innodb_lock_wait_timeout | 500
也和全局设置的一样

2)针对特定实例的专门设置
# mysqld_multi stop 2
# ps xua|grep 3302
root 4156 0.0 0.0 4328 740 pts/0 S+ 02:03 0:00 grep 3302
先修改参数测试
# vim /etc/my.cnf
[mysqld2] 下添加
innodb_lock_wait_timeout = 1000
# mysqld_multi start 2
# mysqladmin -S /mysql/dev/data02/mysql.sock -uroot -pmysqlmulti variables |grep innodb_lock_wait_timeout
| innodb_lock_wait_timeout | 1000
已经修改了

修改idbdata和binlogs等
mysqld_multi stop 2
删除原来的数据文件
# rm /mysql/dev/data02/* -rf
# vim /etc/my.cnf
增加
#Files
log-bin = binlogs/mysql-bin
relay-log = binglogs/mysql-relay-bin
innodb_data_file_path = ibdata1:200M;ibdata2:200M:autoextend
innodb_log_file_size = 100M
注意binlogs文件夹需要预先创建好并且mysql有权限
/usr/libexec/mysqld: File 'binlogs/mysql-bin.index' not found (Errcode: 2)

# mysql_install_db --datadir=/mysql/dev/data02 --user=mysql --force
# mkdir /mysql/dev/data02/binlogs/ && chown mysql.mysql /mysql/dev/data02/binlogs/

[root@teplate dev]# ll /mysql/dev/data02/ -h
total 601M
drwxr-xr-x. 2 mysql mysql 4.0K Oct 6 02:27 binlogs
-rw-rw----. 1 mysql mysql 200M Oct 6 02:27 ibdata1
-rw-rw----. 1 mysql mysql 200M Oct 6 02:27 ibdata2
-rw-rw----. 1 mysql mysql 100M Oct 6 02:27 ib_logfile0
-rw-rw----. 1 mysql mysql 100M Oct 6 02:27 ib_logfile1
drwx------. 2 mysql root 4.0K Oct 6 02:23 mysql
-rw-rw----. 1 mysql mysql 20K Oct 6 02:23 mysql-bin.000001
-rw-rw----. 1 mysql mysql 740K Oct 6 02:23 mysql-bin.000002
-rw-rw----. 1 mysql mysql 38 Oct 6 02:23 mysql-bin.index
-rw-rw----. 1 mysql mysql 5 Oct 6 02:27 mysql.pid
srwxrwxrwx. 1 mysql mysql 0 Oct 6 02:27 mysql.sock
drwx------. 2 mysql root 4.0K Oct 6 02:23 test
[root@teplate dev]# ll /mysql/dev/data02/binlogs/ -h
total 8.0K
-rw-rw----. 1 mysql mysql 106 Oct 6 02:27 mysql-bin.000001
-rw-rw----. 1 mysql mysql 25 Oct 6 02:27 mysql-bin.index
和全局不一样了

其他一些常用参数
innodb_use_native_aio = 0
net_buffer_length = 8K
key_buffer_size = 128M
max_heap_table_size = 2G
tmp_table_size = 2G
max_tmp_tables = 128
table_open_cache = 512
sort_buffer_size = 8M
read_buffer_size = 8M
read_rnd_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
back_log = 200
max_connections = 5000
max_connect_errors = 10000
connect_timeout = 15
character-set-server = utf8
interactive_timeout = 600
expire_logs_days = 3
long_query_time = 5
max_allowed_packet = 16M
max_binlog_size = 1G
myisam_sort_buffer_size = 128M
key_buffer = 128M
thread_cache = 128
table_cache = 512
slave-skip-errors = all
slow_query_log = 1
skip-name-resolve
skip-federated
skip-external-locking
wait_timeout = 600

注意:
log-bin = binlogs/mysql-bin
relay-log = binglogs/mysql-relay-bin
innodb_data_file_path = ibdata1:200M;ibdata2:200M:autoextend
innodb_log_file_size = 100M
这几个参数 涉及到数据文件的 最好默认里设置以后 每一个实例都单独设置 防止一些意外

(二)使用多个mysql-server版本的多个实例
多一个版本唯一的不同就是在具体的实例中指定
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin

MYSQL5上运行多个实例的更多相关文章

  1. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  2. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  3. Linux上运行NET

    今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...

  4. ASP.NET Core 中文文档 第二章 指南(5) 在 Nano Server 上运行ASP.NET Core

    原文 ASP.NET Core on Nano Server 作者 Sourabh Shirhatti 翻译 娄宇(Lyrics) 校对 刘怡(AlexLEWIS).许登洋(Seay).谢炀(kile ...

  5. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  6. 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行

    一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...

  7. 【Win 10应用开发】如何知道UAP在哪个平台上运行

    面向22世纪的现代化应用程序可以同时在多种设备上运行,于是有朋友会有一个疑问:有时候,我们还真的需要判断一下,UAP应用程序在哪个平台上运行.尽管大多情况下我们不必要这样做,但某些特殊情况还得考虑.比 ...

  8. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  9. 同一个PC只能运行一个应用实例(考虑多个用户会话情况)

    原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况) class Program { private static Mutex m; [STAThread] static void Main( ...

随机推荐

  1. monkey测试===Android测试工具Monkey用法简介(转载)

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...

  2. MD5加密学习

    MD5(Message Digest --消息摘要算法)算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错),任何长度的任意内容都可以用MD5计算出散列值.主要作用是[验明“ ...

  3. DXEditingRow的错误原因

    原因之一:例如commbox理由id这一列但是数据库表中没有的话就会报这个错误

  4. C#文件路径乱码

    最近学C#,用C#写serialport遇到了一点小问题记录一下. 问题一: if (!string.IsNullOrEmpty(filePath.ToString())) { try { fs = ...

  5. vue 开始开发

    1,引入vue.js文件 2,在body里用标签 编辑一个入口 <div id="app">{{msg}}</div> <-- 用双大括号 取数据显示 ...

  6. J2EE MySQL Date数据保持一致解决方案

    1.设置MySQL时区,明确指定 MySQL 数据库的时区,不使用引发误解的 CST show variables like '%time_zone%';set global time_zone = ...

  7. conso.log占位符

    %d占位符表示number %s占位符表示string %f占位符表示浮点数 %o占位符表示对象 

  8. Django 如何实现文件下载

    1. 思路: 文件,让用户下载 - a标签+静态文件 - 设置响应头(django如何实现文件下载) 2. a标签实现 <a href="/static/xxx.xlsx"& ...

  9. 封装ajax支持get、post

    为什么要封装ajax,因为…… for(var i=0;i<20;i++){ $.ajax(……) } 的时候,整个页面都卡死了,于是,我开始找答案. 后来,找到了,就是jquery的ajax属 ...

  10. nginx的http负载均衡

    注意:nginx自带的http服务后端检测有缺陷,无法根据状态码来检测,建议使用tengine的nginx_upstream_check_module来实现后端服务的http健康状态检测 (1)负载均 ...