1.简介
MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储、更新和存取信息更加容易。MySQL是一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和许多不同的客户程序以及库组成的。分为关系数据库(mysql、sqlserver、oracle)和非关系型数据库(redis)。
2.关系型数据库
库中的数据二维表的方式存储
一.概念
关系:存储数据的表的表名
元组:就是表中的一条记录(一行就是一条记录)
属性:就是表中的一个字段(一列就是一个字段)
域:字段的取值范围
关键字:可以唯一标识一条记录的字段(这也是一个或多个字段)
关系模型:表和表之间的关系
二.关系型数据库的优点
1. 容易理解
2. 可以借助于sql语句来进行数据的读写
3. 便于维护表中的数据(主要用于保证数据完整、数据一致)
三.关系型数据库的缺点
1. 事务一致性(数据一致性)
为了保证数据的完整,会带来额外的开销,导致性能降低
2. 关系型数据库在高并发的读写请求下,会程序系统的性能瓶颈
3. 可扩展性
拆分,分库,分表
4. 读写的时效性
金融:对时效性往往要求不高
web,社交网络:对时效要较高
5. 需要写复杂的SQL,甚至需要用多表联合查询
3.非关系型数据库(NoSQL)
NoSQL Not Only SQL
通常是作为关系型数据库的一个补充,而且不遵循ACID
通常NoSQL是以key-value的方式存储
一.特点
性能相比关系型数据库更好
更易于扩展
二.非关系型数据库的分类
类型1:key-value
借助于hash表实现快速读写
特点:简单、容易部署、高并发状态下性能好
产品:
redis:内存+磁盘
memcached:纯内存的数据库
类型2:列式存储数据库
Column Family(列簇)
通常场景:用来实现分布式海量数据存储
产品:
HBbase
Cassandra
类型3:面向文档的数据库
数据库中所存放的是文档
产品:
MongoDB
类型4:图形数据库
graph
4.选择mysql理由
1. BAT都在用mysql,而且往往都是从oracle切换到了mysql
2. 性能好,而且稳定
3. 开源
4. 社区活跃
5. 轻量级
6. 维护简单
7. 支持跨平台
8. 支持多种语言(编码)
9. 执行用sql进行数据的读写
5.mysql的版本
社区版:社区人员自行维护的版本,没有售后
商业版:各种功能都是经过官方测试稳定,而且有完善的售后服务
mysql发行版本
Alpha版
beta版
RC版
GA版
mysql的产品线
第一条:5.0-5.1,5.1稳定版
第二条:5.4-5.7,5.5 5.7稳定
第三条:6.0 7.0 8.0 ,最新8.0
6.生产环境中如何选择版本
1. 选择社区版
2. 选择稳定版
3. 建议选择发布时间在6个月以上的稳定
4. 关注版本最近是否有修复补丁
5. 注意是否和开发人员使用的数据兼容
6. 注意是否和现有数据库兼容
7. 现版本的数据库就建议在内部测试运行3-6个月以上
8. 在从原有数据库转移数据的过程中,建议先转移非核心数据,测试是否正常
7.安装mysql(通用二进制格式)
第一步:准备mysql的配置文件(不再提供配置文件模版)
# mv /root/my.cnf /etc/ <<my.cnf需要自己准备,可以复制下方提供的my.cnf文件 说明: 安装位置:/usr/local/mysql 数据位置: /data/mysql/mysql3306/data 临时文件位置:/data/mysql/mysql3306/tmp 日志文件位置:/data/mysql/mysql3306/logs/mysql-bin socket文件位置:/tmp/mysql3306.sock
my.cnf文件
#my.cnf [client] port = 3306 socket = /tmp/mysql3306.sock [mysql] prompt="\\[email protected]\\h:\\p [\\d]>" #pager="less -i -n -S" #tee=/opt/mysql/query.log no-auto-rehash [mysqld] #misc user = mysql basedir = /usr/local/mysql datadir = /data/mysql/mysql3306/data port = 3306 socket = /tmp/mysql3306.sock event_scheduler = 0 tmpdir = /data/mysql/mysql3306/tmp #timeout interactive_timeout = 300 wait_timeout = 300 #character set character-set-server = utf8 open_files_limit = 65535 max_connections = 100 max_connect_errors = 100000 lower_case_table_names =1 #symi replication #rpl_semi_sync_master_enabled=1 #rpl_semi_sync_master_timeout=1000 # 1 second #rpl_semi_sync_slave_enabled=1 #logs log-output=file slow_query_log = 1 slow_query_log_file = slow.log log-error = error.log log_warnings = 2 pid-file = mysql.pid long_query_time = 1 #log-slow-admin-statements = 1 #log-queries-not-using-indexes = 1 log-slow-slave-statements = 1 #binlog #binlog_format = STATEMENT binlog_format = row server-id = 1003306 log-bin = /data/mysql/mysql3306/logs/mysql-bin binlog_cache_size = 4M max_binlog_size = 256M max_binlog_cache_size = 1M sync_binlog = 0 expire_logs_days = 10 #procedure log_bin_trust_function_creators=1 # gtid-mode = on enforce-gtid-consistency=1 #relay log skip_slave_start = 1 max_relay_log_size = 128M relay_log_purge = 1 relay_log_recovery = 1 relay-log=relay-bin relay-log-index=relay-bin.index log_slave_updates #slave-skip-errors=1032,1053,1062 #skip-grant-tables #buffers & cache table_open_cache = 2048 table_definition_cache = 2048 table_open_cache = 2048 max_heap_table_size = 96M sort_buffer_size = 128K join_buffer_size = 128K thread_cache_size = 200 query_cache_size = 0 query_cache_type = 0 query_cache_limit = 256K query_cache_min_res_unit = 512 thread_stack = 192K tmp_table_size = 96M key_buffer_size = 8M read_buffer_size = 2M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 32M #myisam myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1 #innodb innodb_buffer_pool_size = 100M innodb_buffer_pool_instances = 1 innodb_data_file_path = ibdata1:100M:autoextend innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 8M innodb_log_file_size = 100M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 50 innodb_file_per_table = 1 innodb_rollback_on_timeout innodb_status_file = 1 innodb_io_capacity = 100 transaction_isolation = READ-COMMITTED innodb_flush_method = O_DIRECT
第二步:安装mysql
# groupadd mysql # useradd -r -g mysql -s /sbin/nologin mysql # tar xf /root/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz # mv mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/ # cd /usr/local # ln -sv mysql-5.7.23-linux-glibc2.12-x86_64/ mysql # chown mysql.mysql mysql -R
第三步:创建相关目录
# mkdir /data/mysql/mysql3306/{data,tmp,logs} -pv # chown -R mysql.mysql /data
第四步:初始化
生成mysql的系统表和库) # /usr/local/mysql/bin/mysqld --initialize --user=mysql 说明: 1. --user是用于指定以哪个用户的身份完成初始化工作(默认从配置文件中读取) 2. 数据目录下如果有文件,会导致初始化失败 初始化完成后,会在数据目录下生成一系列文件 # cd /data/mysql/mysql3306/data/ # ls auto.cnf error.log ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ib_logfile2 mysql performance_schema slow.log sys 说明: error.log中保存了安装、启动、运行mysql过程中所出现的错误信息出,初始root密码也在其中 获取root的初始密码 # cat /data/mysql/mysql3306/data/error.log | grep password 补充: 用--initialize-inseucre来做初始化的时候,root的初始密码为空
第五步:启动mysql
# /usr/local/mysql/support-files/mysql.server start
第六步:导出二进制
# vim /etc/profile.d/mysql.sh export PATH=$PATH:/usr/local/mysql/bin # source /etc/profile
第七步:登录mysql
# mysql -uroot -pxxx <<xxx表示密码,这里输入你的密码
第八步:重置mysql的root密码
mysql> ALTER USER user() IDENTIFIED BY "123"; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
第九步:生成服务管理脚本
centos5、6 # cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # chkconfig --add mysqld # chkcongig mysqld on # service msyqld start|stop.... centos7 # vim mysql3306.service [Unit] Description=mysql 3306 service [Service] Type=forking ExecStart=/bin/bash /usr/local/mysql/support-files/mysql.server start ExecStop=/bin/bash /usr/local/mysql/support-files/mysql.server stop ExecRestart=/bin/bash /usr/local/mysql/support-files/mysql.server restart [Install] WantedBy=multi-user.target # mv mysql3306.service /usr/lib/systemd/system/ # systemctl enable mysql3306.service # systemctl start mysql3306.service # ss -tnl | grep 3306 # systemctl stop mysql3306.service # ss -tnl | grep 3306
8.多实例(初始化实现)
多实例可以提升服务器的资源使用率,降低单个mysql服务的并发请求量。
第二个mysql实例,配置如下
端口:3307 安装位置: /usr/local/mysql 数据位置: /data/mysql/mysql3307/data 临时文件位置: /data/mysql/mysql3307/tmp 日志文件位置: /data/mysql/mysql3307/logs/mysql-bin socket文件位置:/tmp/mysql3307.sock 配置文件: /data/mysql/mysql3307/my.cnf
第一步:创建相关目录
# mkdir /data/mysql/mysql3307/{tmp,data,logs} -pv # chown -R mysql.mysql /data
第二步:生成配置文件
# cp /etc/my.cnf /data/mysql/mysql3307/ # sed -i ‘s/3306/3307/g‘ /data/mysql/mysql3307/my.cnf # cat /data/mysql/mysql3307/my.cnf
第三步:初始化
# /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my.cnf --initialize
第四步:启动mysql
# /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my.cnf &
第五步:登录多实例
# mysql -uroot -pc-7ae#sgan1K -S /tmp/mysql3307.sock
9.多实例(复制模版实现)
第三个mysql实例,配置如下
端口:3308 安装位置: /usr/local/mysql 数据位置: /data/mysql/mysql3308/data 临时文件位置: /data/mysql/mysql3308/tmp 日志文件位置: /data/mysql/mysql3308/logs/mysql-bin socket文件位置:/tmp/mysql3308.sock 配置文件: /data/mysql/mysql3308/my.cnf
第一步:创建相关目录
# mkdir /data/mysql/mysql3308/{tmp,data,logs} -pv # chown -R mysql.mysql /data
第二步:生成配置文件
# cp /etc/my.cnf /data/mysql/mysql3308/ # sed -i ‘s/3306/3308/g‘ /data/mysql/mysql3308/my.cnf # cat /data/mysql/mysql3308/my.cnf
第三步:复制模版生成系统数据库文件
# cd /data/mysql/ # cp mysql3306/data/* mysql3308/data/ -a
第四步:启动实例
# /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my.cnf & # ss -tnl
第五步:登录实例
# mysql -uroot -pc-7ae#sgan1K -S /tmp/mysql3308.sock
10.启动/关闭mysql
启动mysql /usr/local/mysql/support-files/mysql.server <<使用这个启动mysql会调动bin/mysqld_safe /usr/local/mysql/bin/mysqld_safe <<这个启动,如果mysql关闭会再启动 看门狗 /usr/local/mysql/bin/mysqld <<要通过这个来实现启动 关闭mysql mysqladmin -uUserName -pPassword -hIP -Pport -S /path/to/socket shutdown
原文地址:https://www.cnblogs.com/kenken2018/p/9774406.html