#!/usr/bin/env python

import os
import sys
import re base_dir = '/opt/software/mysql-5.7.17-linux-glibc2.5-x86_64' os.chdir('/opt/software')
tar_result = os.system('tar xvf %s &>/dev/null' % sys.argv[])
if tar_result == :
os.chdir('/usr/local')
os.system('ln -s %s mysql' % base_dir)
else:
print "uncompress wrong" user_result = os.system('id mysql')
if user_result==:
print "user exist"
else:
os.system('groupadd mysql')
os.system('useradd -g mysql -M -s /sbin/login mysql') os.system('mkdir -p /data/mysql/mysql3306/{data,logs,tmp}')
os.system('chown -R mysql:mysql /data/mysql/mysql3306/')
os.system('chown -R mysql:mysql /opt/software/mysql-5.7.17-linux-glibc2.5-x86_64')
os.system('chown -R mysql:mysql /usr/local/mysql')
os.chdir('/opt/software')
os.system('cp my.cnf /etc/my.cnf')
os.chdir('/usr/local/mysql')
init = os.system('./bin/mysqld --initialize')
if init == :
with open('/data/mysql/mysql3306/data/error.log') as fobj:
for line in fobj:
if 'root@localhost' in line:
m = re.search('(root@localhost:)(.+)',line)
if m:
passwd = m.group()
print "password:%s" % passwd
os.system('cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld')
os.system('export PATH=$PATH:/usr/local/mysql/bin')
with open('/etc/profile','a+') as profile:
profile.write('\nPATH=$PATH:/usr/local/mysql/bin')

转自

Python脚本安装MySQL5.7 - Time.catcher - 博客园
https://www.cnblogs.com/weiwenbo/p/6640605.html

python版本:python2.6

centos版本:centos6.9

mysql版本:mysql5.7.19

安装目录路径和数据目录路径都是固定,当然也可以自己修改

这个脚本的原理是,通过createmycnf.sh的shell脚本生成my.cnf,buffer pool大小等在shell脚本里已经计算好,然后installmysql.py修改生成好的my.cnf里的端口等变量

并根据my.cnf来初始化mysql,初始化完毕之后启动mysql服务,并设置mysql的root用户密码,整个执行过程的日志会保存在当前目录下的installmysql.log

注意:目前不支持多实例安装,只支持单实例安装

执行脚本前要先安装MySQL-python

yum install -y MySQL-python

installmysql.py

installmysql.py脚本参数

-P:mysql端口号
-f:mysql二进制安装包位置
-b:createmycnf.sh文件的位置
-p:mysql的root用户密码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author : huazai
# @Time : 2017/5/4 22:04
# @File : installmysql.py
# @Description : mysql数据目录路径:/data/mysql/ ,mysql安装目录路径:/usr/local/mysql import os
import sys
from optparse import OptionParser
from subprocess import Popen, PIPE
import shlex
import time
import MySQLdb
import re
import shutil
import tarfile
import stat
import logging
import pwd logger = None
MYSQL_DATA_DIR = '/data/mysql/'
MYSQL_INSTALL_DIR = '/usr/local/mysql/'
MYSQL_CONF_DIR = '/etc/'
MYSQL_BACK_DIR = '/data/backup/mysql/'
MYSQL_STARTUP_SCRIPT = '/etc/init.d/mysql' def init_log():
global logger
fmt_date = '%Y-%m-%d %H:%M:%S.%s'
fmt_file = '%(lineno)s %(asctime)s [%(process)d]: %(levelname)s %(filename)s %(message)s' log_file = 'installmysql.log'
logger = logging.getLogger('mysqlinstallloging')
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler(log_file, mode='a')
file_handler.setFormatter(logging.Formatter(fmt_file, fmt_date))
logger.addHandler(file_handler) def opt():
parser = OptionParser("Usage: %prog -P -f -b -p")
parser.add_option("-P", "--port",
dest="port",
action="store",
default="",
help='port 3306')
parser.add_option("-f", "--tarfile",
dest="tarfile",
action="store",
default="/tmp/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz",
help='file /tmp/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz')
parser.add_option("-b", "--bashfile",
dest="myfile",
action="store",
default="/tmp/createmycnf.sh",
help='file /tmp/createmycnf.sh')
parser.add_option("-p", "--mysqlpwd",
dest="mysqlpwd",
action="store",
default="",
help='password 123456')
options, args = parser.parse_args()
return options, args # 设置安装目录和数据目录的权限
def setOwner(mysqlport):
list=[]
with open('/etc/passwd', 'r') as fd:
for line in fd:
matchmysql = re.search(r'mysql', line, re.I) if matchmysql:
os.system('chown -R mysql:mysql %s' % MYSQL_DATA_DIR)
os.system('chown -R mysql:mysql %s' % MYSQL_INSTALL_DIR)
else:
os.system('useradd -M -s /sbin/nologin mysql')
os.system('chown -R mysql:mysql %s' % MYSQL_DATA_DIR)
os.system('chown -R mysql:mysql %s' % MYSQL_INSTALL_DIR)
#检查安装目录和数据目录权限
for i in pwd.getpwnam('mysql'):
list.append(i)
mysqluid = list[2]
mysqlgid = list[3]
stdatadirmode = os.stat(MYSQL_DATA_DIR).st_mode
stinstalldirmode = os.stat(MYSQL_INSTALL_DIR).st_mode
if not (os.stat(MYSQL_DATA_DIR).st_uid == mysqluid and os.stat(MYSQL_DATA_DIR).st_gid == mysqlgid):
logger.error('chown mysql datadir or installdir not ok ')
sys.exit(1)
if not (os.stat(MYSQL_DATA_DIR+'mysql%s/data' %(mysqlport)).st_uid == mysqluid and os.stat(MYSQL_DATA_DIR+'mysql%s/data' %(mysqlport)).st_gid == mysqlgid):
logger.error('chown mysql datadir or installdir not ok ')
sys.exit(1)
if not (os.stat(MYSQL_DATA_DIR+'mysql%s/logs' %(mysqlport)).st_uid == mysqluid and os.stat(MYSQL_DATA_DIR+'mysql%s/data' %(mysqlport)).st_gid == mysqlgid):
logger.error('chown mysql datadir or installdir not ok ')
sys.exit(1)
if not (os.stat(MYSQL_DATA_DIR + 'mysql%s/tmp' % (mysqlport)).st_uid == mysqluid and os.stat(MYSQL_DATA_DIR + 'mysql%s/tmp' % (mysqlport)).st_gid == mysqlgid):
logger.error('chown mysql datadir or installdir not ok ')
sys.exit(1) # 创建必要的目录
def makeDIR(port):
if os.path.exists('/data/mysql/mysql%s/data' % port):
logger.error('mysql %s already install' % port)
sys.exit(1) try:
# os.makedirs('/usr/local/mysql')
os.makedirs('/data/mysql/mysql%s/data' % port)
os.makedirs('/data/mysql/mysql%s/tmp' % port)
os.makedirs('/data/mysql/mysql%s/logs' % port)
except Exception, e:
logger.error(e) # 解压二进制安装包
def extract(mysqlfile):
if not os.path.exists(mysqlfile):
logger.error('%s is not exists' % mysqlfile)
sys.exit(1)
os.chdir(os.path.dirname(mysqlfile))
t = tarfile.open(mysqlfile, 'r:gz')
t.extractall() # 解压到当前目录
t.close() # 拷贝安装包文件到程序目录
def copyFile(mysqlfile):
shutil.copytree(mysqlfile.split('.tar.gz')[0], MYSQL_INSTALL_DIR)
shutil.copy2(MYSQL_INSTALL_DIR + 'support-files/mysql.server', MYSQL_STARTUP_SCRIPT)
shutil.rmtree(mysqlfile.split('.tar.gz')[0]) # 设置环境变量
def setEnv():
with open('/etc/profile', 'a') as fd:
fd.write('export PATH=$PATH:/usr/local/mysql/bin' + '\n')
os.system('source /etc/profile') # 初始化mysql
def mysqlInstall():
cnf = '/etc/my.cnf'
if os.path.exists(cnf):
cmd = MYSQL_INSTALL_DIR + "bin/mysqld --defaults-file=%s --initialize-insecure" % cnf
p = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
if stdout:
logger.info('install output: %s' % (stdout))
if stderr:
logger.error('install error output: %s' % (stderr)) if p.returncode == 0:
logger.info('initialize completed')
logger.info('install returncode: %s' % (p.returncode))
else:
logger.info('initialize failed , please check the mysql errror log')
logger.info('install returncode: %s' % (p.returncode))
sys.exit(1)
else:
logger.error(cnf + ' do not esixts')
sys.exit(1) # 设置my.cnf
def mycnfCreate(mybashfile, mysqlport):
cnf = '/etc/my.cnf'
cmd = "/bin/bash %s" % mybashfile
p = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE)
p.communicate()
p.returncode
f1 = open(cnf, "r", )
f2 = open("%s.bak" % cnf, "w", )
for line in f1:
f2.write(re.sub(r'', mysqlport, line, count=1))
f1.close()
f2.close()
os.remove(cnf)
os.rename("%s.bak" % cnf, cnf) # 设置启动脚本
def modifyStartupscript(port):
isdatadirfind = 0
isbasedirfind = 0
f1 = open(MYSQL_STARTUP_SCRIPT, "r", )
f2 = open("%s.bak" % MYSQL_STARTUP_SCRIPT, "w", )
for line in f1:
if line.startswith('datadir=') and not isdatadirfind:
f2.write(line.replace('datadir=', 'datadir=/data/mysql/mysql%s/data' % port, 1))
isdatadirfind = 1
elif line.startswith('basedir=') and not isbasedirfind:
f2.write(line.replace('basedir=', 'basedir=/usr/local/mysql', 1))
isbasedirfind = 1
else:
f2.write(line)
f1.close()
f2.close()
os.remove(MYSQL_STARTUP_SCRIPT)
os.rename("%s.bak" % MYSQL_STARTUP_SCRIPT, MYSQL_STARTUP_SCRIPT)
# 设置启动脚本执行权限
stmode = os.stat(MYSQL_STARTUP_SCRIPT).st_mode
os.chmod(MYSQL_STARTUP_SCRIPT, stmode | stat.S_IXOTH | stat.S_IXGRP | stat.S_IXUSR) # 检查安装
def checkInstall(port):
if not os.path.exists('/data/mysql/mysql%s/data/ibdata1' % port):
logger.error('mysql not install ')
sys.exit(1)
with open('/data/mysql/mysql%s/logs/error.log' % port, 'r') as fd:
fdlist = [i for i in fd if i]
fdstr = ''.join(fdlist)
re_error = re.compile(r'\s\[error\]\s', re.I | re.M) # 匹配errorlog日志格式
errorlist = re_error.findall(fdstr) if errorlist:
logger.error('error.log error count:' + str(len(errorlist)))
logger.error('mysql not install ')
sys.exit(1)
else:
logger.info('install mysql ok') def mysqlserviceStart():
cnf = '/etc/my.cnf'
cmd = MYSQL_INSTALL_DIR+"bin/mysqld --defaults-file=%s &" %(cnf)
p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
stdout, stderr = p.communicate()
if stdout:
logger.info('mysql startup output: %s' % (stdout))
if stderr:
logger.error('mysql startup error output: %s' % (stderr)) if p.returncode == 0:
logger.info('mysql startup completed')
logger.info('mysql startup returncode: %s' % (p.returncode))
else:
logger.info('mysql startup failed , please check the mysql errror log')
logger.info('mysql startup returncode: %s' % (p.returncode))
sys.exit(1)
time.sleep(4) # 休眠4秒 让mysql完全启动完毕 #连接mysql
def connMysql(mysqlport):
cnf = '/etc/my.cnf'
if os.path.exists(cnf):
host = 'localhost'
user = 'root'
dbname = 'mysql'
usocket = MYSQL_DATA_DIR+'mysql%s/tmp/mysql.sock' % (mysqlport)
try:
conn = MySQLdb.connect(host=host, user=user, db=dbname, unix_socket=usocket)
except Exception, e:
logger.error(e)
sys.exit(1)
cur = conn.cursor()
return cur #设置mysql的root的密码
def runSQL(mysqlport, mysqlpwd):
sql = "alter user root@localhost identified by '%s' " % (mysqlpwd)
cur = connMysql(mysqlport)
cur.execute(sql) if __name__ == '__main__':
init_log() options, args = opt()
try:
cmd = args[0]
except IndexError:
print "%s follow a command" % __file__
print "%s -h" % __file__
sys.exit(1) if (options.port and str.isdigit(options.port)) and (options.tarfile and os.path.isfile(options.tarfile)) and (
options.myfile and os.path.isfile(options.myfile)) and (
options.mysqlpwd):
mysqlport = options.port
mysqlfile = options.tarfile
mybashfile = options.myfile
mysqlpwd = options.mysqlpwd else:
print "%s -h" % __file__
sys.exit(1) if cmd == 'create':
mycnfCreate(mybashfile, mysqlport)
logger.info('step1:mycnfCreate completed') makeDIR(mysqlport)
logger.info('step2:makeDIR completed') extract(mysqlfile)
logger.info('step3:extract completed') copyFile(mysqlfile)
logger.info('step4:copyFile completed') setOwner(mysqlport)
logger.info('step5:setOwner completed') mysqlInstall()
logger.info('step6:mysql_install completed') setEnv()
logger.info('step7:setEnv completed') modifyStartupscript(mysqlport)
logger.info('step8:modify_startupscript completed') checkInstall(mysqlport)
logger.info('step9:checkInstall completed') mysqlserviceStart()
logger.info('step10:mysqlserviceStart completed') runSQL(mysqlport, mysqlpwd)
logger.info('step11:runSQL completed') print 'mysql install finish'
        # 调用示例
# python /tmp/installmysql.py -f /data/download/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -P3306 -p123456 -b /tmp/createmycnf.sh create

createmycnf.sh

#!/bin/bash
# Written by steven
# Name: createmycnf.sh
# Version: v1.
# Function: 创建my.cnf
# Create Date: -- port= #端口
expirelogsdays= #binlog清除时间
relaylogpurge= #mha环境不能清除
innodbbufferpoolsize=$(printf "%1.f\n" `echo "$(free -m |grep Mem|awk '{ print $2}')*0.8"|bc`)M # bufferpool大小,物理内存的80%
innodbiocapacity= # iocapacity大小
innodbpurgethreads= #清除线程数量
performanceschema= # 是否打开P_S库
environment=product #是否是生产环境 ip=$(ip a|awk -F "inet|/" '/inet.*brd/ {print $2}'|awk -F'.' '{print $4}')
serverid=$ip$port cat > /etc/my.cnf<< EOF
[client]
port = $port
socket = /data/mysql/mysql$port/tmp/mysql.sock # The MySQL server
[mysqld]
#########Basic##################
explicit_defaults_for_timestamp=true port = $port
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/mysql$port/data
tmpdir = /data/mysql/mysql$port/tmp
pid-file = /data/mysql/mysql$port/tmp/mysql.pid
socket = /data/mysql/mysql$port/tmp/mysql.sock
#skip-grant-tables #character set
character_set_server = utf8mb4 open_files_limit =
back_log =
#event_scheduler = ON
#lower_case_table_names=
log_timestamps =
skip-external-locking
skip_name_resolve =
#skip-networking =
default-storage-engine = InnoDB #timeout
wait_timeout=
lock_wait_timeout=
interactive_timeout=
connect_timeout = server-id =$serverid #ip最后一位+端口号 #percona 的--recursion-method slavehost模式
#report_host = 10.105.9.115
#report_port = #plugin
plugin-load="semisync_master.so;semisync_slave.so" #########SSL#############
ssl-ca = /data/mysql/mysql$port/data/ca.pem
ssl-cert = /data/mysql/mysql$port/data/server-cert.pem
ssl-key = /data/mysql/mysql$port/data/server-key.pem #########undo#############
innodb_undo_logs = #每个tablespace里包含的rollback seg的个数
innodb_undo_directory =/data/mysql/mysql$port/logs/
innodb_max_undo_log_size = 1G
innodb_undo_tablespaces = #undo tablespace的个数
innodb_undo_log_truncate =
innodb_purge_rseg_truncate_frequency = #########error log#############
log-error = /data/mysql/mysql$port/logs/error.log
log_error_verbosity = #########general log#############
#general_log=
#general_log_file=/data/mysql/mysql$port/logs/mysql.log #########slow log#############
slow_query_log =
long_query_time= #0表示记录所有SQL
slow_query_log_file = /data/mysql/mysql$port/logs/mysql.slow ############# for replication###################
log-bin = /data/mysql/mysql$port/logs/mysql-bin
binlog_format = row
max_binlog_size = 500M
binlog_cache_size = 5M
max_binlog_cache_size = 5M
expire-logs-days = $expirelogsdays
slave-net-timeout=
log-slow-slave-statements = log_bin_trust_function_creators =
log-slave-updates =
skip-slave-start =
#super_read_only = #GTID
gtid-mode = on
binlog_gtid_simple_recovery=
enforce_gtid_consistency= #relay log
relay-log = /data/mysql/mysql$port/logs/mysql-relay
relay-log-index=/data/mysql/mysql$port/logs/relay-bin.index
max-relay-log-size = 500M
relay_log_purge = $relaylogpurge #MHA里不能清除relaylog #replication crash safe
sync_master_info =
sync_relay_log_info =
sync_relay_log =
relay_log_recovery =
master_info_repository = TABLE
relay_log_info_repository = TABLE #semisync 动态开启 主从切换的时候用
#rpl_semi_sync_master_enabled =
#rpl_semi_sync_master_wait_no_slave =
#rpl_semi_sync_master_timeout =
#rpl_semi_sync_slave_enabled =
#rpl_semi_sync_master_timeout =
#rpl_semi_sync_master_wait_point = 'after_sync' # after_sync .7增强半同步
#rpl_semi_sync_master_wait_for_slave_count = 等待多少个从库接收到binlog #ignore
#replicate-ignore-db = 'school','school2'
#replicate-do-db = 'school','school2'
#replicate-do-table = 'db1.t1'
#replicate-ignore-table= 'db1.t1' #Multi-threaded Slave
#slave_parallel_workers=
#slave-parallel-type=DATABASE(默认)/LOGICAL_CLOCK
#binlog_group_commit_sync_delay=
#binlog_group_commit_sync_no_delay_count =
#slave_preserve_commit_order= #replication error
#slave-skip-errors=,, #######per_thread_buffers#####################
max_connections=
max_user_connections=
max_connect_errors=
#myisam_recover
max_allowed_packet = 16M
#table_cache =
table_open_cache =
table_definition_cache =
table_open_cache_instances = read_buffer_size = 1M
join_buffer_size = 4M
read_rnd_buffer_size = 1M #myisam
sort_buffer_size = 128K
myisam_max_sort_file_size = 10G
myisam_repair_threads =
key_buffer_size = 64M myisam_sort_buffer_size = 32M
tmp_table_size = 64M
max_heap_table_size = 64M
query_cache_type=
query_cache_size =
bulk_insert_buffer_size = 32M thread_cache_size =
#thread_concurrency =
thread_stack = 192K ###############InnoDB###########################
innodb_data_home_dir = /data/mysql/mysql$port/data
innodb_log_group_home_dir = /data/mysql/mysql$port/logs
innodb_data_file_path = ibdata1:1000M:autoextend
innodb_temp_data_file_path = ibtmp1:12M:autoextend innodb_buffer_pool_size = $innodbbufferpoolsize innodb_buffer_pool_instances =
#innodb_additional_mem_pool_size = 16M
innodb_log_file_size = 500M
innodb_log_buffer_size = 16M
innodb_log_files_in_group =
innodb_flush_log_at_trx_commit =
sync_binlog =
innodb_lock_wait_timeout =
innodb_sync_spin_loops =
innodb_max_dirty_pages_pct =
innodb_support_xa =
innodb_thread_concurrency =
innodb_thread_sleep_delay =
innodb_concurrency_tickets =
innodb_flush_method = O_DIRECT
innodb_file_per_table =
innodb_read_io_threads =
innodb_write_io_threads =
innodb_io_capacity = $innodbiocapacity
innodb_flush_neighbors =
innodb_purge_threads=$innodbpurgethreads
innodb_purge_batch_size =
innodb_old_blocks_pct=
innodb_change_buffering=all
innodb_stats_on_metadata=OFF
innodb_print_all_deadlocks =
performance_schema=$performanceschema
transaction_isolation = READ-COMMITTED
#innodb_force_recovery=
#innodb_fast_shutdown=
#innodb_status_output=
#innodb_status_output_locks=
#innodb_status_file = [mysqldump]
quick
max_allowed_packet = 128M [mysql]
no-auto-rehash
max_allowed_packet = 128M
prompt = '($environment)\u@\h:\p [\d]> '
default_character_set = utf8 [myisamchk]
key_buffer_size = 64M
sort_buffer_size = 512k
read_buffer = 2M
write_buffer = 2M [mysqlhotcopy]
interactive-timeout [mysqld_safe]
#malloc-lib= /usr/local/mysql/lib/mysql/libjemalloc.so
EOF

转自

python自动安装mysql5.7 - 桦仔 - 博客园
https://www.cnblogs.com/lyhabc/archive/2017/11/19/7859427.html

        # 调用示例
# python /tmp/installmysql.py -f /data/download/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz -P3306 -p123456 -b /tmp/createmycnf.sh create

python自动安装mysql5.7【转】的更多相关文章

  1. python自动安装mysql5.7

    python自动安装mysql5.7 python版本:python2.6 centos版本:centos6.9 mysql版本:mysql5.7.19 安装目录路径和数据目录路径都是固定,当然也可以 ...

  2. Python自动安装第三方类库

    Python在使用过程中会用到大量的第三方库,逐一手工去下载.安装比较繁琐.可以配置第三方镜像源并使用pip进行自动安装.这里推荐选择豆瓣的镜像源:http://pypi.douban.com/sim ...

  3. MySQL脚本自动安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz

    脚本安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz 先准备好数据文件的路径 softdir='/data/soft' 把脚本和tar包放在相应的路径下,其实就是 ...

  4. [转载]--用Python 自动安装软件

    脚本使用了  Python 2.3 + Com 对象,所以你的系统必须安装Python2.3或更高版本同时必须安装  Mark Hammond's Win32all 模块 (特别感谢Mark Hamm ...

  5. python自动安装python2.7

    #coding = utf-8 import os import sys if(os.getuid() == 0): pass else: print ("you are not root ...

  6. mysql5.7 在Centeros 6 下自动安装的shell脚本

    概述: 此脚本实现了在Centeros 6版本下自动安装mysql5.7到目录 /opt/mysql-5.7*并且做软连接映射到 /usr/local/mysql,自动修改root密码为:123456 ...

  7. python第三方库自动安装脚本

    #python第三方库自动安装脚本,需要在cmd中运行此脚本#BatchInstall.pyimport oslibs = {"numpy","matplotlib&qu ...

  8. Mysql5.7免编译版自动安装脚本

    一:readme: .此脚本仅仅适合于5.7免面编译安装版本. .安装是需自己选择mysql软件安装包:例如mysql--linux-glibc2.-x86_64.-linux-glibc2.-x86 ...

  9. 【Python】安装MySQLdb模块centos 6.1 宝塔Linux面板 MySQL5.6

    [Python]安装MySQLdb模块centos 6.1 宝塔Linux面板 MySQL5.6 总之是各种坑 先说一下,宝塔安装在centos 6.1 i368 也就是32位系统上的方法 https ...

随机推荐

  1. MongoDB给数据库创建用户

    一.先以非授权的模式启动MongoDB 非授权: linux/Mac : mongod -f /mongodb/etc/mongo.conf windows  : mongod --config c: ...

  2. PAT 1063 计算谱半径

    https://pintia.cn/problem-sets/994805260223102976/problems/994805267860930560 在数学中,矩阵的“谱半径”是指其特征值的模集 ...

  3. thinkphp在app接口开发过程中的通讯安全认证

    对于我们写好的接口,如果不经过安全认证就可以直接访问的话,则将对我们网站产生非常大的安全隐患,一些hack可能直接用你的接口去操作数据库,后果无法估量.那么如何才能进行有效的安全验证呢? 这里我采用了 ...

  4. Vue入门---事件与方法详解

    一. vue方法实现 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  5. BZOJ2442 Usaco2011 Open修剪草坪(动态规划+单调队列)

    显然可以dp.显然可以单调队列优化一下. #include<iostream> #include<cstdio> #include<cmath> #include& ...

  6. SSM框架 mapper.xml中 value的空值判断问题

    先看解决方案,其他的都是问题的出处 解决方案:if中使用 _parameter,#{value}不变 <if test="_parameter!='' and _parameter!= ...

  7. 【刷题】清橙 A1339 JZPLCM(顾昱洲)

    试题来源 2012中国国家集训队命题答辩 问题描述 给定一长度为n的正整数序列a,有q次询问,每次询问一段区间内所有数的lcm(即最小公倍数).由于答案可能很大,输出答案模1000000007. 输入 ...

  8. 【题解】 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)

    bzoj1923,戳我戳我 Solution: 这个高斯消元/线性基很好看出来,主要是判断在第K 次统计结束后就可以确定唯一解的地方和\(bitset\)的骚操作 (我用的线性基)判断位置,我们可以每 ...

  9. 【BZOJ1017】[JSOI2008]魔兽地图(动态规划)

    [BZOJ1017][JSOI2008]魔兽地图(动态规划) 题面 BZOJ 洛谷 题解 状态设一下,\(f[i][j][k]\)表示第\(i\)个物品,有\(j\)个用于合成,总花费为\(k\)的最 ...

  10. 51nod 1667 概率好题

    Description: 甲乙进行比赛. 他们各有k1,k2个集合[Li,Ri] 每次随机从他们拥有的每个集合中都取出一个数 S1=sigma甲取出的数,S2同理 若S1>S2甲胜 若S1=S2 ...