前言MySQL是常用的关系型数据库具有以下特点1、开源不需要支付额外的费用即可使用2、支持包括Windows/Linux在内的多个操作系统3、支持多种语言包括中文编码GB 2312、BIG5日文的shift_JIS4、为包括C、C、java、python、PHP在内的多种编程语言提供了API5、支持多种存储引擎例如MyISAM、InnoDB6、使用标准的SQL语言进行操作7、支持多线程充分利用CPU资源8、存储数据量大32位系统表文件最大可支持4GB64位系统表文件最大可支持8TB9、可以定制采用了GPL协议通过修改源码来开发自己的MySQL系统基于以上特点MySQL被广泛用于学习与实际工作中本篇文章介绍在Linux系统中使用多种方式部署并初始化MySQL数据库包括源码安装、rpm安装以及yum安装。实验环境介绍1、最小化安装的4核4g Centos7.6 虚拟机2、XShell远程连接工具3、本文章中使用的所有源码包、rpm包的下载地址https://www.mysql.com/downloads/一、源码包安装MySQL相较于其他两种安装源码安装较繁琐但优势在于可以在安装时以及初始化阶段将需要设置的参数一次性设置到位以下是安装过程1、配置MySQL编译安装一些版本的Linux系统中默认存在mariadb组件该组件与安装MySQL是冲突的在安装MySQL之前必须把该组件卸载掉其中 --nodeps可以指定只删除mariadb-libs不删除其依赖关系12rpm -qa |grepmariadbrpm -e --nodeps mariadb-libs接下来为MySQL安装依赖这些依赖包在本地yum源中均存在无需配置其他网络yum源。1yuminstall-y cmakemakegcc gcc-c openssl openssl-devel ncurses ncurses-devel bisonbison-devel将依赖包上传至Linux系统中需要安装命令lrzsz该命令可实现Windows拖动文件上传至Linux系统中1yum -yinstalllrzsz之后将在MySQL官网上下载的源码包拖动上传至Linux系统解压源码包到指定路径下解压完成后切换到该路径下12tar-zxf mysql-boost-5.7.37.tar.gz -C/usr/src/cd/usr/src/mysql-5.7.37/接着进行预编译有别于其他软件MySQL的预编译使用的是cmake命令复制以下代码1cmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql-DMYSQL_DATADIR/usr/local/mysql/data-DSYSCONFDIR/usr/local/mysql/etc-DWITH_INNOBASE_STORAGE_ENGINEON -DWITH_MYISAM_STORAGE_ENGINEON -DDEFAULT_CHARSETutf8 -DDEFAULT_COLLATIONutf8_general_ci -DENABLED_LOCAL_INFILEON -DMYSQL_TCP_PORT3306 -DMYSQL_UNIX_ADDR/usr/local/mysql/tmp/mysql.sock -DWITH_INNODB_MEMCACHEDON -DWITH_BOOSTboost/boost_1_59_0#解释一下上述代码-DCMAKE_INSTALL_PREFIX —指定安装路径-DMYSQL_DATADIR —数据目录即MySQL的数据存放路径-DSYSCONFDIR —配置文件所在路径-DWITH_INNOBASE_STORAGE_ENGINE/-DWITH_MYISAM_STORAGE_ENGINE —启用两种存储引擎-DDEFAULT_CHARSET/-DDEFAULT_COLLATION —指定字符集-DENABLED_LOCAL_INFILE —启用或禁用LOAD DATA LOCAL INFILE 语句-DMYSQL_TCP_PORT —指定服务端口号-DMYSQL_UNIX_ADDR —指定Unix套接字文件的路径-DWITH_INNODB_MEMCACHED —启用或禁用InnoDB 存储引擎对 Memcached 的支持-DWITH_BOOST —指定boost库运行完上述代码如果出现报错检查一下依赖包是否都齐全接着进行编译安装1make-j4 makeinstall其中-j选项表示多个线程进行编译这样可以节省时间2、初始化数据库安装完成后运行如下代码123456789groupadd mysqluseradd-r -g mysql -s/bin/falsemysqlcd/usr/local/mysqlmkdir-p/usr/local/mysql/datamkdir-p/usr/local/mysql/etcmkdir-p/usr/local/mysql/tmpmkdir-p/usr/local/mysql/logschown-R mysql:mysql/usr/local/mysqlvim/usr/local/mysql/etc/my.cnf解释一下上述代码groupadd mysql #为MySQL创建一个组来管理软件的运行useradd -r-g mysql -s /bin/false mysql #为MySQL创建一个用户来管理软件的运行cd /usr/local/mysql #切换到MySQL的安装路径mkdir -p /usr/local/mysql/data #创建安装前指定的数据存放目录mkdir -p /usr/local/mysql/etc #创建安装前指定的配置文件所在目录mkdir -p /usr/local/mysql/tmp #创建临时文件目录mkdir -p /usr/local/mysql/logs #创建日志文件目录vim /usr/local/mysql/etc/my.cnf #创建编辑配置文件默认也存在配置文件但其中内容较少将以下的配置文件粘贴进去123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123[client]#客户端设置port3306#服务器监听端口默认为3306socket/usr/local/mysql/tmp/mysql.sock#Unix套接字文件路径默认/tmp/mysql.sock[mysqld]#服务端设置## 一般配置选项port3306#服务器监听端口默认为3306basedir/usr/local/mysql#MySQL安装根目录datadir/usr/local/mysql/data#MySQL数据文件目录socket/usr/local/mysql/tmp/mysql.sock#Unix套接字文件路径默认/tmp/mysql.sockpid-file/usr/local/mysql/tmp/mysql.pid#服务进程pid文件路径character_set_serverutf8#默认字符集default_storage_engineInnoDB#默认InnoDB存储引擎usermysql## 连接配置选项max_connections200#最大并发连接数table_open_cache400#表打开缓存大小默认2000open_files_limit1000#打开文件数限制默认5000max_connect_errors200#最大连接失败数默认100back_log100#请求连接队列数connect_timeout20#连接超时时间默认10秒interactive_timeout1200#交互式超时时间默认28800秒wait_timeout600#非交互超时时间默认28800秒net_read_timeout30#读取超时时间默认30秒net_write_timeout60#写入超时时间默认60秒max_allowed_packet8M#最大传输数据字节默认4Mthread_cache_size10#线程缓冲区池大小thread_stack256K#线程栈大小32位平台196608、64位平台262144## 临时内存配置选项tmpdir/tmp#临时目录路径tmp_table_size64M#临时表大小默认16Mmax_heap_table_size64M#最大内存表大小默认16Msort_buffer_size1M#排序缓冲区大小默认256Kjoin_buffer_size1M#join缓冲区大小默认256K## Innodb配置选项#innodb_thread_concurrency0 #InnoDB线程并发数innodb_io_capacity200#IO容量可用于InnoDB后台任务的每秒I/O操作数IOPSinnodb_io_capacity_max400#IO最大容量InnoDB在这种情况下由后台任务执行的最大IOPS数innodb_lock_wait_timeout50#InnoDB引擎锁等待超时时间默认50单位秒innodb_buffer_pool_size512M#InnoDB缓冲池大小默认128Minnodb_buffer_pool_instances4#InnoDB缓冲池划分区域数innodb_max_dirty_pages_pct75#缓冲池最大允许脏页比例默认为75innodb_flush_methodO_DIRECT#日志刷新方法默认为fdatasyncinnodb_flush_log_at_trx_commit2#事务日志刷新方式默认为0transaction_isolationREPEATABLE-READ#事务隔离级别默认REPEATABLE-READinnodb_data_home_dir/usr/local/mysql/data#表空间文件路径默认保存在MySQL的datadir中innodb_data_file_pathibdata1:128M:autoextend#表空间文件大小innodb_file_per_tableON#每表独立表空间innodb_log_group_home_dir/usr/local/mysql/data#redoLog文件目录默认保存在MySQL的datadir中innodb_log_files_in_group2#日志组中的日志文件数默认为2innodb_log_file_size128M#日志文件大小默认为48MBinnodb_log_buffer_size32M#日志缓冲区大小默认为16MB## MyISAM配置选项key_buffer_size32M#索引缓冲区大小默认8Mread_buffer_size4M#顺序读缓区冲大小默认128Kread_rnd_buffer_size4M#随机读缓冲区大小默认256Kbulk_insert_buffer_size8M#块插入缓冲区大小默认8Mmyisam_sort_buffer_size8M#MyISAM排序缓冲大小默认8M#myisam_max_sort_file_size1G #MyISAM排序最大临时大小myisam_repair_threads1#MyISAM修复线程skip-external-locking#跳过外部锁定启用文件锁会影响性能## 日志配置选项log_outputFILE#日志输出目标TABLE输出到表、FILE输出到文件、NONE不输出可选择一个或多个以逗号分隔log_error/usr/local/mysql/logs/error.log#错误日志存放路径log_error_verbosity1#错误日志过滤允许的值为1仅错误2错误和警告3错误、警告和注释默认值为3。log_timestampsSYSTEM#错误日志消息格式日志中显示时间戳的时区UTC默认值和 SYSTEM本地系统时区general_logON#开启查询日志一般选择不开启因为查询日志记录很详细会增大磁盘IO开销影响性能general_log_file/usr/local/mysql/logs/general.log#通用查询日志存放路径## 慢查询日志配置选项slow_query_logON#开启慢查询日志slow_query_log_file/usr/local/mysql/logs/slowq.log#慢查询日志存放路径long_query_time2#慢查询时间默认10单位秒min_examined_row_limit100#最小检查行限制检索的行数必须达到此值才可被记为慢查询log_slow_admin_statementsON#记录慢查询管理语句log_queries_not_using_indexesON#记录查询未使用索引语句log_throttle_queries_not_using_indexes5#记录未使用索引速率限制默认为0不限制log_slow_slave_statementsON#记录从库复制的慢查询作为从库时生效从库复制中如果有慢查询也将被记录## 复制配置选项server-id1#MySQL服务唯一标识log-binmysql-bin#开启二进制日志默认位置是datadir数据目录log-bin-indexmysql-bin.index#binlog索引文件binlog_formatMIXED#binlog日志格式分三种STATEMENT、ROW或MIXEDMySQL 5.7.7之前默认为STATEMENT之后默认为ROWbinlog_cache_size1M#binlog缓存大小默认32KBmax_binlog_cache_size1G#binlog最大缓存大小推荐最大值为4GBmax_binlog_size256M#binlog最大文件大小最小值为4096字节最大值和默认值为1GBexpire_logs_days7#binlog过期天数默认为0不自动删除log_slave_updatesON#binlog级联复制sync_binlog1#binlog同步频率0为禁用同步最佳性能但可能丢失事务为1开启同步影响性能但最安全不会丢失任何事务为N操作N次事务后同步1次relay_logrelay-bin#relaylog文件路径默认位置是datadir数据目录relay_log_indexrelay-log.index#relaylog索引文件max_relay_log_size256M#relaylog最大文件大小relay_log_purgeON#中继日志自动清除默认值为1ONrelay_log_recoveryON#中继日志自动恢复auto_increment_offset1#自增值偏移量auto_increment_increment1#自增值自增量slave_net_timeout60#从机连接超时时间replicate-wild-ignore-tablemysql.%#复制时忽略的数据库表告诉从线程不要复制到与给定通配符模式匹配的表skip-slave-start#跳过Slave启动Slave复制进程不随MySQL启动而启动## 其他配置选项#memlockON #开启内存锁此选项生效需系统支持mlockall()调用将mysqld进程锁定在内存中防止遇到操作系统导致mysqld交换到磁盘的问题[mysqldump]#mysqldump数据库备份工具quick#强制mysqldump从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中max_allowed_packet16M#最大传输数据字节使用mysqldump工具备份数据库时某表过大会导致备份失败需要增大该值大于表大小即可[myisamchk]#使用myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化他们key_buffer_size32M#索引缓冲区大小myisam_sort_buffer_size8M#排序缓冲区大小read_buffer_size4M#读取缓区冲大小write_buffer_size4M#写入缓冲区大小初始化最后一步按照配置文件的内容来创建数据库1bin/mysqld--defaults-file/usr/local/mysql/etc/my.cnf --initialize --usermysql3、配置环境变量为MySQL数据库配置环境变量123echoexportMYSQL_HOME/usr/local/mysql/etc/profile#软件的路径echoexportPATH$MYSQL_HOME/bin:$PATH /etc/profile#命令的路径source/etc/profile#重新加载系统环境变量配置文件复制配置文件到init.d目录使系统能够使使用systemctl命令管理MySQL1234567cp/usr/src/mysql-5.7.37/support-files/mysql.server/etc/init.d/mysqlcd/etc/init.d/chmodx mysqlsystemctl daemon-reloadsystemctl start mysqlchkconfig mysql onsystemctl status mysql设置软链接,把MySQL的命令都放在默认的命令里面使得可以在系统的任何地方使用MySQL的命令1ln-s/usr/local/mysql/bin/*/usr/local/bin/自MySQL5.7版本起MySQL初始有默认密码存放在日志文件当中