为了日后安装数据库方便,遂写了一个自动安装MySQL的脚本:

测试可以安装mariadb和MySQL-5.7.X

安装前配置好对应的my.cnf文件放在/tmp路径下

将启动脚本mysql3306放在/usr/local/下

将安装包放在/usr/local路径下

安装方式为:./install_mysql.sh mysql-5.7.20 3306  # 第一个参数为数据库版本(格式统一),第二个参数为端口号,两个参数都可以根据自己情况修改

数据库启动/关闭为:service mysql3306 start/stop/restart/status

下面分别为安装脚本install_mysql.sh、启动脚本mysql3306、配置文件my.cnf

#!/bin/bash
############ Install MySQL############ export LANG=C
export LC_ALL=C #Set the LANG and all environment variable beginning with LC_ to C
typeset -r version=$
typeset -r port=$ # DEFINED VAR START
typeset -r softwaredir="/usr/local"
typeset -r basedir="/usr/local/mysql" #input version of server
typeset -r databasedir="/data/${port}"
typeset -r datadir="${databasedir}/data"
typeset -r logdir="${databasedir}/log"
typeset -r mysqluser="mysql"
typeset -r defaults_file="${databasedir}/my.cnf"
typeset -r mysqldautostartfile="/etc/rc.d/init.d/mysql${port}"
typeset -r pidfile="${databasedir}/mysql.pid"
typeset -r socketlink="${databasedir}/mysql.sock"
typeset timestamp=''
typeset sInsDir_G=''
typeset sLogDir_G=''
typeset sLog_G='' #DEFINED ENV START
export PATH=/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:$PATH
#DEFINED ENV END ## -------------------- init global vars -------------------
sInsDir_G=$( echo $(basename $) | awk -F. '{print $1}' )
if [ -z "${sLog_G}" ]; then
sLog_G="/backup/SysMgtScripts/Log/${sInsDir_G}/$( hostname ).log"
fi
if [ -z "${sLogDir_G}" ]; then
sLogDir_G=${sLog_G%/*}
fi
if [ ! -d ${sLogDir_G} ]; then
mkdir -p ${sLogDir_G}
fi
## --------------------------------------------------------- export sLog_G
export sLogDir_G ## ensure the directory structure exists
BASEDIR="/backup/SysMgtScripts/"
if [ ! -d $BASEDIR ]; then
mkdir -p ${BASEDIR}/Log
fi ## -------------------- colourful print --------------------
rMsg () { echo -e "\033[031;1m$@\033[0m"; }
gMsg () { echo -e "\033[032;1m$@\033[0m"; }
yMsg () { echo -e "\033[033;1m$@\033[0m"; } ## normal message print and log
LogMsg()
{
local timestamp=$( date '+%F %T' )
gMsg "[${timestamp}]: $*"
printf "[%s]:%s\n" "${timestamp}" "$*" >> "${sLog_G}"
} # warning
Warn()
{
local timestamp=$( date '+%F %T' )
yMsg "[${timestamp}]: $*"
printf "[%s]:%s\n" "${timestamp}" "$*" >> "${sLog_G}"
} # error
Error()
{
local retval=$?
local timestamp=$( date '+%F %T' )
rMsg "[${timestamp}]: $*"
printf "[%s]:%s\n" "${timestamp}" "$*" >> "${sLog_G}"
exit $?
} #Check mysql user exit or not.
CheckUser(){
cat /etc/passwd |grep mysql &>/dev/null
if [ $? -ne 0 ];then
Warn "user ${mysqluser} not exist"
useradd ${mysqluser} || Error "Create MySQL user Failed"
else
LogMsg "user ${mysqluser} exist"
fi
} #Create dir for database
InitDirs(){
list="${databasedir} ${datadir} ${logdir}"
for i in $list;
do
if [ ! -d $i ];then
Warn "Missing directory $i "
mkdir -p $i || Error "Fail to create directory $i"
LogMsg "$i create successfully"
fi Test_Owner_T=`ls -l -d $i |awk '{print $3}'`
if [[ "${Test_Owner_T}" != "${mysqluser}" ]];then
chown -R ${mysqluser}:${mysqluser} $i || Error "Fail to change the directory owner"
fi
done
} InitEnv(){
bashrc="/etc/profile"
Test_Env_T=`cat ${bashrc} |grep "${basedir}"`
if [[ "${Test_Env_T}" != "" ]];then
LogMsg "${basedir} is already exists in ${bashrc}"
else
MYSQL_HOME=${basedir}
echo "MYSQL_HOME=${basedir}" >> ${bashrc} || Error "Fail to init environment"
echo "export PATH=\$PATH:${MYSQL_HOME}/bin" >> ${bashrc}
LogMsg "Add MYSQL_HOME to /etc/profile"
fi
source /etc/profile
} SetMycnf(){
cp /tmp/my.cnf ${defaults_file} || Error "Fail to create my.cnf" if [[ ! -f "/etc/my.cnf" ]];then
LogMsg "The Parameter File is OK"
else
mv /etc/my.cnf /etc/my.cnf.bak
LogMsg "removed /etc/my.cnf to /etc/my.cnf.bak"
fi
} UnzipPackages() {
Mysql_Package=`find ${softwaredir} -name ${version}*.tar.gz`
if [[ ! -f ${Mysql_Package} ]];then
Error "MySQL Install Package is not found"
else
Mysql_File=`find ${softwaredir} -name ${version}*.tar.gz -exec basename {} .tar.gz \;`
if [[ ! -d "/usr/local/${Mysql_File}" ]];then
LogMsg "unzip MySQL Install Package"
tar xf ${Mysql_Package} -C ${softwaredir} || Error "Fail to unzip the Package"
else
LogMsg "No need to unzip"
fi
fi
} InstallMysql(){
reallinkname=${basedir}
Mysql_File=`find ${softwaredir} -name ${version}*.tar.gz -exec basename {} .tar.gz \;`
if [[ ! -d ${Mysql_File} ]];then
LogMsg "It is unziping mysql install Package ..."
UnzipPackages
LogMsg "unzip successful"
fi
cd ${softwaredir}
if [[ ! -d ${basedir} ]];then
ln -s ${Mysql_File} ${reallinkname}
chown -R ${mysqluser}:${mysqluser} ${reallinkname}
fi
cd ${reallinkname}
result=$(echo ${version}|grep mariadb)
if [[ "$result" != "" ]];then
LogMsg "Install $version..."
./scripts/mysql_install_db --defaults-file=${defaults_file} >>/dev/null || Error "Fail to init MySQL"
else
LogMsg "Install $version..."
bin/mysqld --defaults-file=${defaults_file} --user=mysql --initialize-insecure --datadir=${datadir} --basedir=${basedir} >>/dev/null || Error "Fail to init MySQL"
bin/mysql_ssl_rsa_setup --datadir=${datadir}>>/dev/null
sleep 2
fi
} MakeScript(){
if [[ ! -f /usr/local/mysql3306 ]];then
Error "start script file mysql3306 not found"
else
chmod u+x /usr/local/mysql3306
cp ${softwaredir}/mysql3306 ${mysqldautostartfile}
sed -i "0,/^basedir=/s@basedir=@basedir=${basedir}@" ${mysqldautostartfile}
sed -i "0,/^datadir=/s@datadir=@datadir=${databasedir}@" ${mysqldautostartfile}
fi
} #start script
StartMySQL(){
service mysql${port} start || Error "MySQL start Failed"
} # change mysql password
ChangePassword(){
mysql -S /data/${port}/mysql.sock -e "set password for root@localhost = password('123456');" || Error "Change root password Failed"
mysql -S /data/${port}/mysql.sock -uroot -p123456 -e "grant all privileges on *.* to root@'%' identified by '123456' with grant option;"
} TaskMain(){
LogMsg "It is checking whether the mysqluser ready or not ..."
CheckUser
LogMsg "The mysqluser is ready" LogMsg "It is initiazating directories ..."
InitDirs
LogMsg "The directories initiazating successful" LogMsg "It is initiazating environment variables ..."
InitEnv
LogMsg "The environment variables initiazating successful" LogMsg "It is setting default files ..."
SetMycnf
LogMsg "The default files set successful" LogMsg "It is installing mysql database ..."
InstallMysql
LogMsg "the mysql database install successful" LogMsg "It is making mysql start script ..."
MakeScript
LogMsg "make script successful" LogMsg "It is starting mysql ..."
StartMySQL
LogMsg "successful" LogMsg "It is changing mysql password ..."
ChangePassword
LogMsg "change successful" LogMsg "The mysql service set successful"
} # The execution body of the script
LogMsg "============Start Install MySQL============"
TaskMain $@;rc=$?
if [ ${rc} -ne 0 ] ;then
Error '[ERROR] Failed to install mysql.'
else
LogMsg '[INFO] Completed install mysql.'
fi
LogMsg "The script execution ends."
exit ${rc}

启动脚本:

#!/bin/sh
# Copyright Abandoned TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind # MySQL daemon start/stop script. # Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down. # Comments to support chkconfig on RedHat Linux
# chkconfig:
# description: A very fast and reliable SQL database engine. # Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $local_fs $network $remote_fs
# Should-Start: ypbind nscd ldap ntpd xntpd
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:
# Default-Stop:
# Short-Description: start and stop MySQL
# Description: MySQL is a very fast and reliable SQL database engine.
### END INIT INFO # If you install MySQL on some other places than /usr/local/mysql, then you
# have to do one of the following things for this script to work:
#
# - Run this script from within the MySQL installation directory
# - Create a /etc/my.cnf file with the following information:
# [mysqld]
# basedir=/usr/local/mysql<path-to-mysql-installation-directory>
# - Add the above to any other configuration file (for example ~/.my.ini)
# and copy my_print_defaults to /usr/bin
# - Add the path to the mysql-installation-directory to the basedir variable
# below.
#
# If you want to affect other MySQL variables, you should make your changes
# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files. # If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files. basedir=
datadir= # Default value, in seconds, afterwhich the script should timeout waiting
# for server start.
# Value here is overriden by value in my.cnf.
# means don't wait at all
# Negative numbers mean to wait indefinitely
service_startup_timeout= # Lock directory for RedHat / SuSE.
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql" # The following variables are only set for letting mysql.server find things. # Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
then
basedir=/usr/local/mysql
bindir=/usr/local/mysql/bin
if test -z "$datadir"
then
datadir=/usr/local/mysql/data
fi
sbindir=/usr/local/mysql/bin
libexecdir=/usr/local/mysql/bin
else
bindir="$basedir/bin"
if test -z "$datadir"
then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
fi # datadir_set is used to determine if datadir was set (and so should be
# *not* set inside of the --basedir= handler.)
datadir_set= #
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
export PATH mode=$ # start or stop [ $# -ge ] && shift other_args="$*" # uncommon, but needed when called from an RPM upgrade action
# Expected: "--skip-networking --skip-grant-tables"
# They are not checked here, intentionally, as it is the resposibility
# of the "spec" file author to give correct arguments only. case `echo "testing\c"`,`echo -n testing` in
*c*,-n*) echo_n= echo_c= ;;
*c*,*) echo_n=-n echo_c= ;;
*) echo_n= echo_c='\c' ;;
esac parse_server_arguments() {
for arg do
case "$arg" in
--basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
bindir="$basedir/bin"
if test -z "$datadir_set"; then
datadir="$basedir/data"
fi
sbindir="$basedir/sbin"
libexecdir="$basedir/libexec"
;;
--datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
datadir_set=
;;
--pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
--service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
esac
done
} wait_for_pid () {
verb="$1" # created | removed
pid="$2" # process ID of the program operating on the pid-file
pid_file_path="$3" # path to the PID file. i=
avoid_race_condition="by checking again" while test $i -ne $service_startup_timeout ; do case "$verb" in
'created')
# wait for a PID-file to pop into existence.
test -s "$pid_file_path" && i='' && break
;;
'removed')
# wait for this PID-file to disappear
test ! -s "$pid_file_path" && i='' && break
;;
*)
echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"
exit
;;
esac # if server isn't running, then pid-file will never be updated
if test -n "$pid"; then
if kill - "$pid" >/dev/null; then
: # the server still runs
else
# The server may have exited between the last pid-file check and now.
if test -n "$avoid_race_condition"; then
avoid_race_condition=""
continue # Check again.
fi # there's nothing that will affect the file.
log_failure_msg "The server quit without updating PID file ($pid_file_path)."
return # not waiting any more.
fi
fi echo $echo_n ".$echo_c"
i=`expr $i + `
sleep done if test -z "$i" ; then
log_success_msg
return
else
log_failure_msg
return
fi
} # Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld]
if test -x "$bindir/my_print_defaults"; then
print_defaults="$bindir/my_print_defaults"
else
# Try to find basedir in /etc/my.cnf
conf=/etc/my.cnf
print_defaults=
if test -r $conf
then
subpat='^[^=]*basedir[^=]*=\(.*\)$'
dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
for d in $dirs
do
d=`echo $d | sed -e 's/[ ]//g'`
if test -x "$d/bin/my_print_defaults"
then
print_defaults="$d/bin/my_print_defaults"
break
fi
done
fi # Hope it's in the PATH ... but I doubt it
test -z "$print_defaults" && print_defaults="my_print_defaults"
fi #
# Read defaults file from 'basedir'. If there is no defaults file there
# check if it's in the old (depricated) place (datadir) and read it from there
# extra_args=""
if test -r "$basedir/my.cnf"
then
extra_args="-e $basedir/my.cnf"
fi parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server` #
# Set pid file if not given
#
if test -z "$mysqld_pid_file_path"
then
mysqld_pid_file_path=$datadir/`hostname`.pid
else
case "$mysqld_pid_file_path" in
/* ) ;;
* ) mysqld_pid_file_path="$datadir/$mysqld_pid_file_path" ;;
esac
fi case "$mode" in
'start')
# Start daemon # Safeguard (relative paths, core dumps..)
cd $basedir echo $echo_n "Starting MySQL"
if test -x $bindir/mysqld_safe
then
# Give extra arguments to mysqld with the my.cnf file. This script
# may be overwritten at next upgrade.
$bindir/mysqld_safe --defaults-file="$datadir/my.cnf" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$? # Make lock for RedHat / SuSE
if test -w "$lockdir"
then
touch "$lock_file_path"
fi exit $return_value
else
log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
fi
;; 'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password. if test -s "$mysqld_pid_file_path"
then
# signal mysqld_safe that it needs to stop
touch "$mysqld_pid_file_path.shutdown" mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/null)
then
echo $echo_n "Shutting down MySQL"
kill $mysqld_pid
# mysqld should remove the pid file when it exits, so wait for it.
wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
else
log_failure_msg "MySQL server process #$mysqld_pid is not running!"
rm "$mysqld_pid_file_path"
fi # Delete lock for RedHat / SuSE
if test -f "$lock_file_path"
then
rm -f "$lock_file_path"
fi
exit $return_value
else
log_failure_msg "MySQL server PID file could not be found!"
fi
;; 'restart')
# Stop the service and regardless of whether it was
# running or not, start it again.
if $0 stop $other_args; then
$0 start $other_args
else
log_failure_msg "Failed to stop running server, so refusing to try to start."
exit 1
fi
;; 'reload'|'force-reload')
if test -s "$mysqld_pid_file_path" ; then
read mysqld_pid < "$mysqld_pid_file_path"
kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL"
touch "$mysqld_pid_file_path"
else
log_failure_msg "MySQL PID file could not be found!"
exit 1
fi
;;
'status')
# First, check to see if pid file exists
if test -s "$mysqld_pid_file_path" ; then
read mysqld_pid < "$mysqld_pid_file_path"
if kill -0 $mysqld_pid 2>/dev/null ; then
log_success_msg "MySQL running ($mysqld_pid)"
exit 0
else
log_failure_msg "MySQL is not running, but PID file exists"
exit 1
fi
else
# Try to find appropriate mysqld process
mysqld_pid=`pidof $libexecdir/mysqld` # test if multiple pids exist
pid_count=`echo $mysqld_pid | wc -w`
if test $pid_count -gt 1 ; then
log_failure_msg "Multiple MySQL running but PID file could not be found ($mysqld_pid)"
exit 5
elif test -z $mysqld_pid ; then
if test -f "$lock_file_path" ; then
log_failure_msg "MySQL is not running, but lock file ($lock_file_path) exists"
exit 2
fi
log_failure_msg "MySQL is not running"
exit 3
else
log_failure_msg "MySQL is running but PID file could not be found"
exit 4
fi
fi
;;
*)
# usage
basename=`basename "$0"`
echo "Usage: $basename {start|stop|restart|reload|force-reload|status} [ MySQL server options ]"
exit 1
;;
esac exit 0

配置文件:

[client]
port =
socket = /data//mysql.sock [mysqld]
port =
socket = /data//mysql.sock
user = mysql
server_id =
character-set-server = utf8
default-storage-engine = innodb
pid-file = /data//mysql.pid
datadir = /data//data
basedir = /usr/local/mysql
lower_case_table_names =
interactive_timeout =
local_infile =
max-connections =
back_log =
max_connect_errors =
open_files_limit =
table_definition_cache =
innodb_buffer_pool_size = 1G
log_bin = /data//data/mysql-bin
slow_query_log_file = /data//log/slowlog.log
log_error = /data//log/mysql-error.log
relay_log = /data//log/mysql-relay
innodb_autoextend_increment =
innodb_file_per_table =
innodb_open_files =
innodb-log-files-in-group =
innodb_log_file_size = 200M
innodb_rollback_on_timeout =
innodb_lock_wait_timeout =
innodb_sort_buffer_size = 4M
innodb_log_buffer_size = 32M
innodb_read_io_threads =
innodb_write_io_threads =
join_buffer_size =
tmp_table_size = 64M
max_heap_table_size = 64M
read_buffer_size =
read_rnd_buffer_size =
binlog_format = row
binlog_cache_size =
long_query_time =
slow_query_log =
master_verify_checksum =
slave_sql_verify_checksum =
relay_log_recovery =
relay_log_purge =
sync_binlog =
expire_logs_days =

mysql自动化安装脚本(二进制安装)的更多相关文章

  1. 编译安装和二进制安装mysql

    二进制安装mysql-5.6.46 mysql二进制安装,已经编译成二进制了,只需要做一些配置即可 [root@localhost ~]$ yum install autoconf libaio -y ...

  2. CentOS6.9安装MySQL(编译安装、二进制安装)

    目录 CentOS6.9安装MySQL Linux安装MySQL的4种方式: 1. 二进制方式 特点:不需要安装,解压即可使用,不能定制功能 2. 编译安装 特点:可定制,安装慢 5.5之前: ./c ...

  3. centos7:mysql-5.7.23安装(二进制安装)

    mysql有二进制码安装,和源码编译安装(mysql5.5使用cmake安装,mysql5.7需要安装boost依赖安装),因为boost依赖安装麻烦,所以用二进制码安装 MySql 5.7.23安装 ...

  4. rpm安装和二进制安装

    rpm包安装 Tomcat RPM安装(先安装JDK + 再安装Tomcat) 1:升级系统自带的JDK(也可以使用oracle的JDK) yum install -y java-1.8.0-open ...

  5. shell 脚本二进制安装mysql

    以下脚本的手动安装连接:https://www.cnblogs.com/leihongnu/p/12581793.html [ #/bin/bash#脚本安装 mysql,上传安装包至 /rootcd ...

  6. MySQL 5.6.19 二进制安装

    1.        操作系统 CentOS release 6.2 (Final) 2.        创建用户和组 [root@mymaster1 ~]# groupadd mysql [root@ ...

  7. 自动化(脚本)安装httpd服务

    思路: 1.检查传递的参数,httpd源码文件 2.检查执行脚本的用户是否为root 3.检查rpm是否安装过httpd,若安装过,则卸载 4.安装编译所需的工具 5.从网上下载httpd源码 6.配 ...

  8. Linux mysql 5.5.10 二进制安装过程记录和 修改 密码 登录

    1.useradd clouder2.解压缩mysql.tar.bz2到/home/clouder2.mv /etc/my.cnf /etc/my.cnf.bak3./home/clouder/mys ...

  9. centos 安装mindoc 二进制安装

    自建 文档管理系统或者说 wiki系统 mindoc官网: https://www.iminho.me/#%E6%BC%94%E7%A4%BA mindoc github页面:https://gith ...

随机推荐

  1. 【hdu 1527】取石子游戏

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  2. WPF实现控件拖动

    原文:WPF实现控件拖动 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lordwish/article/details/51823637 实现控件 ...

  3. XMPP之安装mySQL--Mac OS(一)

    come from:http://www.cnblogs.com/xiaodao/archive/2013/04/04/2999426.html 一.安装 到MySQL官网上http://dev.my ...

  4. HDU 1224 Free DIY Tour - 最短路

    传送门 题目大意: 一个有向图(n + 1相当于1),每个点有一个权值(可以认为1和n+1权值为0),求从1走到n+1(相当于走回1)的最大路径权值和是多少,输出方案. 题目分析: 最短路问题,输出方 ...

  5. Java对象基础的一些小问题

    1 权限修饰符public protected private default..访问权限修饰符   public protected default private 同类 T T T T 同包 T ...

  6. Android小游戏:功夫蛇 团队开发经验总结

    前言 曾经没有代码管理的习惯,不用回版本控制工具.这种陋习虽然让原来千穿百孔的代码远离了实现,但这种逃避未必就是一件好事吧;). 于是从博客中挖出了原来的文章,并千辛万苦找到了最早的代码贴出来. 这篇 ...

  7. Delphi 中的字符串(还解释了shortstring)good

    一.Delphi 2009 之前的字符串(不支持 Unicode): Delphi 2009 之前的字符串分为 3 种:ShortString.AnsiString.WideString. [Shor ...

  8. CSS:描述样式

    一.CSS css:Cascading Style Sheet,层叠样式表,用于描述网页样式 1. 同一个标签可以有多个选择器作用,给他增加样式: 2. 有继承性,祖先的标签的一些属性,可以继承给后代 ...

  9. string操作

    常用的功能测试: #! -*- coding:utf-8 -*- import string s = 'Yes! This is a string' print '原字符串:' + s print ' ...

  10. 简明Python3教程 11.数据结构

    简介 数据结构基本上就是 – 可以将一些数据结合到一起的结构,换言之用于存储一组相关的数据. python拥有4种内建数据结构 – 列表,元组(tuple),字典和集合. 我们将看到如何它们,它们又是 ...