linux安装mysql8.0.x的完整步骤
MySQL
MySQL简介
MySQL原本是⼀个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲⾻⽂公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能⾼、成本低、可靠性好,已经成为最流⾏的开源数据库,因此被⼴泛地应⽤在Internet上的中⼩型⽹站中。随着MySQL的不断成熟,它也逐渐⽤于更多⼤规模⽹站和应⽤,⽐如、Google和Facebook等⽹站。⾮常流⾏的开源软件组合LAMP中的“M”指的就是MySQL。
但被甲⾻⽂公司收购后,Oracle⼤幅调涨MySQL商业版的售价,且甲⾻⽂公司不再⽀持另⼀个⾃由软件项⽬OpenSolaris的发展,因此导致⾃由软件社们对于Oracle是否还会持续⽀持MySQL社版(MySQL之中唯⼀的免费版本)有所隐忧,MySQL的创始⼈麦克尔·维德纽斯以MySQL为基础,成⽴分⽀计划MariaDB。⽽原先⼀些使⽤MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如已于2013年正式宣布将从MySQL迁移到MariaDB数据库[6]。
关系型数据库
关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和⽅法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均⽤关系模型来表⽰。关系模型是由埃德加·科德于1970年⾸先提出的,并配合“科德⼗⼆定律”。现如今虽然对此模型有⼀些批评意见,但它还是数据存储的传统标准。标准数据查询语⾔SQL就是⼀种基于关系数据库的语⾔,这种语⾔执⾏对关系数据库中数据的检索和操作。
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
MySQL特性
MySQL是⼀种使⽤⼴泛的数据库,特性如下:
使⽤C和C++编写,并使⽤了多种编译器进⾏测试,保证源代码的可移植性 
⽀持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2
Wrap、Solaris、Windows等多种操作系统。 
为多种编程语⾔提供了API。编程语⾔包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 
⽀持多线程,充分利⽤CPU资源 
优化的SQL查询算法,有效地提⾼查询速度
既能够作为⼀个单独的应⽤程序应⽤在客户端服务器⽹络环境中,也能够作为⼀个库⽽
嵌⼊到其他的软件中提供多语⾔⽀持,常见的编码如中⽂的GB 2312、BIG5,⽇⽂的Shift_JIS等都可以⽤作数据表名和数据列名
提供TCP/IP、ODBC和JDBC等多种数据库连接途径
提供⽤于管理、检查、优化数据库操作的管理⼯具
可以处理拥有上千万条记录的⼤型数据库
MySQL应⽤
与⼤型数据库例如Oracle、DB2、SQL Server等相⽐,MySQL⾃有它的不⾜之处,如规模⼩、功能有
限(MySQL Cluster的功能和效率都相对⽐较差)等,但是这丝毫也没有减少它受欢迎的程度。对于⼀般的个⼈使⽤者和中⼩型企业来说,MySQL提供的功能已经绰绰有余,⽽且由于MySQL是开放源码软件,因此可以⼤⼤降低总体拥有成本。⽬前Internet上流⾏的⽹站构架⽅式是LAMP(Linux+Apache+MySQL+PHP),即使⽤Linux作为操作系统,Apache作为Web服务器,MySQL 作为数据库,PHP作为服务器端脚本解释器。由于Linux+Apache+MySQL+PHP都是⾃由或开放源码软件(FLOSS),因此使⽤LAMP不⽤花⼀分钱就可以建⽴起⼀个稳定、免费的⽹站系统。
MySLQ存储引擎
MySQL存储引擎简介
插件式存储引擎是MySQL数据库最重要的特性之⼀,⽤户可以根据应⽤的需要选择如何存储和索引数据库,是否使⽤事务等。mySQL默认⽀持多种存储引擎,以适应不同领域的数据库应⽤需要。⽤户可以通过选择使⽤不同的存储引擎提⾼应⽤的效率,提供灵活的存储,⽤户设置可以按照⾃⼰的需要定制和使⽤⾃⼰的存储引擎,以实现最⼤程度的可定制性。
MySQL常⽤的存储引擎为MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是⾮事务安全表。
MyISAM是MySQL的默认存储引擎。MyISAM不⽀持事务、也不⽀持外键,但其访问速度快,对事务完整性没有要求。
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能⼒的事务安全。但是⽐起MyISAM存储引擎,InnoDB写的处理效率差⼀些并且会占⽤更多的磁盘空间以保留数据和索引。MySQL⽀持外键存储引擎只有InnoDB,在创建外键的时候,要求附表必须有对应的索引,⼦表在创建外键的时候也会⾃动创建对应的索引。
MySQL存储引擎特性
主要体现在性能、事务、并发控制、参照完整性、缓存、故障恢复,备份及回存等⼏个⽅⾯
⽬前⽐较普及的存储引擎是MyISAM和InnoDB,⽽MyISAM⼜是绝⼤部分Web应⽤的⾸选。MyISAM与InnoDB的主要的不同点在于性能和事务控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method)的扩展实现,ISAM被设计为适合处理读频率远⼤于写频率的情况,因此ISAM以及后来的MyISAM都没有考虑对事物的⽀持,不需要事务记录,ISAM的查询效率相当可观,⽽且内存占⽤很少。
MyISAM在继承了ISAM优点的同时,与时俱进的提供了⼤量实⽤的新特性和相关⼯具。例如考虑到并
发控制,提供了表级锁。
⽽且由于MyISAM是每张表使⽤各⾃独⽴的存储⽂件(MYD数据⽂件和MYI索引⽂件),使得备份及恢复⼗分⽅便(拷贝覆盖即可),⽽且还⽀持在线恢复。
所以如果应⽤不需要事务,不⽀持外键,处理的只是基本的CRUD(增删改查)操作,那么MyISAM是不⼆选择。
linux (CentOS7.5_x86_64)下安装mysql8.0
# 下载mysql
$ wget mirrors.163/mysql/Downloads/MySQL-8.0/mysql-8.0.13-el7-x86_
# 解压
$ mysql tar -zxvf mysql-8.0.4-rc-linux-glibc2.12-x86_ -C /usr/local
# 修改⽂件夹名称
$ mv mysql-8.0.4-rc-linux-glibc2.12-x86_64/ mysql
添加默认配置⽂件
$ vim/etc/myf
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
user=mysql
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
# 创建mysql组
$ groupadd mysql
# 创建mysql⽤户
$ useradd -g mysql mysql
# 创建mysql数据⽬录
$ mkdir $MYSQL_HOME/data
# 初始化mysql
$ /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
# 初始化报错
bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
# 解决⽅法
yum install -y libaio
# 初始化报错
2018-07-08T02:53:24.542370Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc) starting as process 17745 ...
mysqld: Can't create/write to file '/tmp/mysql/data/ibd35qXQ' (Errcode: 13 - Permission denied)
2018-07-08T02:53:24.554816Z 1 [ERROR] [MY-011066] InnoDB: Unable to create temporary file; errno: 13
2018-07-08T02:53:24.554856Z 1 [ERROR] [MY-011066] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again. 2018-07-08T02:53:24.555000Z 0 [ERROR] [MY-010020] Data Dictionary initialization failed.
2018-07-08T02:53:24.555033Z 0 [ERROR] [MY-010119] Aborting
2018-07-08T02:53:24.555919Z 0 [System] [MY-010910] /usr/local/mysql/bin/mysqld: Shutdown complete.
# 解决办法:修改/tmp/mysql的⽬录权限
$ chown -R mysql:mysql /tmp/mysql
# 初始化成功
> 如果⽆异常情况⽇志如下可以看到mysql默认会⽣成root账号和密码root@localhost: /TI(mjVAs1Ta
[root@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2019-01-29T10:19:34.023997Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server in progress as process 4240
2019-01-29T10:19:39.764895Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: /TI(mjVAs1Ta
2019-01-29T10:19:43.041419Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server has completed
# 拷贝mysql启动⽂件到系统初始化⽬录
$ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 启动mysql服务器
$ service mysqld start
mysql 基本操作
# 使⽤mysql客户端连接mysql
$ /usr/local/mysql/bin/mysql -u root -p password
修改mysql的默认初始化密码
> alter user 'root'@'localhost' identified by 'root';
# 创建⽤户 CREATE USER '⽤户名称'@'主机名称' INDENTIFIED BY '⽤户密码'
> create user 'jack'@'localhost' identified by 'jack';
# 授予权限 grant 权限 on 数据库.表 to '⽤户名'@'登录主机' [INDENTIFIED BY '⽤户密码'];
> grant replication slave on *.* to 'jack'@'localhost';
# 刷新
# $ flush privileges;
# 修改root⽤户可以远程连接
> update mysql.user set host='%' where user='root';
# 查看mysql所⽤⽤户
> select user,host from mysql.user;
# docker 修改mysql的最⼤连接数
apt-get update
apt-get install vim
vim /etc/f.d/mysqldf
max_connections=1000
> alter user 'root'@'%' identified with mysql_native_password by 'root';
mysql 集主从复制
准备两台安装好的mysql服务器
# 配置主服务添加如下配置
$ vim /etc/myf
# 节点唯⼀id值
server-id=1
# 开启⼆进制⽇志
log-bin=mysql-bin
# 指定⽇志格式有mixed|row|statement 推荐mixed
binlog-format=mixed
# 步进值auto_imcrement。⼀般有n台主MySQL就填n(可选配置)
auto_increment_increment=2
# 起始值。⼀般填第n台主MySQL。此时为第⼀台主MySQL(可选配置)
auto_increment_offset=1
# 忽略mysql库(可选配置)
binlog-ignore=mysql
# 忽略information_schema库(可选配置)
binlog-ignore=information_schema
# 要同步的数据库,默认所有库(可选配置)
replicate-do-db=db1
# slave 节点配置
# 节点唯⼀id值
server-id=2
# 开启⼆进制⽇志
log-bin=mysql-bin
# 步进值auto_imcrement。⼀般有n台主MySQL就填n(可选配置)
auto_increment_increment=2
# 起始值。⼀般填第n台主MySQL。此时为第⼀台主MySQL(可选配置)
auto_increment_offset=2
# 要同步的数据库,默认所有库(可选配置)
replicate-do-db=db1
# 查看 master 的状态 , 尤其是当前的⽇志及位置
> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |  1608 |    |    |    |
+------------------+----------+--------------+------------------+-------------------+
# 在slave节点执⾏如下命令
注意master_log_file 是对应show master status;中file的值,master_log_pos是对应position的值> change master to
master_host='192.168.79.15',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000009',
master_log_pos=0;
# 启动 slave 状态 ( 开始监听 msater 的变化 )
> start slave;
# 查看 slave 的状态
> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.79.15
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 863
Relay_Log_File: node-6-relay-bin.000002
Relay_Log_Pos: 500
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 863
Relay_Log_Space: 709
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
mysql下载哪个盘Master_UUID: 6291c709-23af-11e9-99fb-000c29071862
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
# 当Slave_IO_Running: Yes和Slave_SQL_Running: Yes都为yes是说明主从复制正常
#重置 slave 状态 .
$ reset slave;
#暂停 slave 状态 ;
$ stop slave;
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。