免编译二进制安装mysql5.7

环境:centos 6.9 x64
先下载mysql安装包
选择 linux - Generic

 

下载完毕后,得到安装包 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
此包不再需要make编译源代码(真是扛扛的),之前的mysql-5.6.4.tar.gz包是源码包,需要先cmake,再make & make install
上传到centos6.9的/apps目录下(可以改为你需要的目录,这里只是举例)
ssh登录到centos6.9,开始执行以下命令
查找出系统自带的mysql RPM包,卸载掉
rpm -qa |grep -i mysql
rpm -e --nodeps mysql-libs-5.1.73-8.el6_8.x86_64
 
提取需要安装依赖库:
yum install -y gcc-c++
yum install -y numactl.x86_64
yum install -y libaio
yum install -y openssl-devel
 
 
1.解压tar包

cd /apps
tar -xzvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.23-linux-glibc2.12-x86_64 mysql
 
2.添加用户与组

groupadd mysql
useradd mysql -g mysql
chown -R mysql:mysql mysql
 
3.安装数据库,初始化

su mysql
cd mysql/
bin/mysqld --defaults-file=/apps/mysql/my.cnf --initialize-insecure --user=mysql --basedir=/apps/mysql --datadir=/apps/mysql/data/
 
exit
 
执行以下命令创建 RSA private key
bin/mysql_ssl_rsa_setup --datadir=/apps/mysql/data
 
修改data 目录拥有者为 mysql
chown -R mysql:mysql /apps/mysql/data
 
4.配置文件

cd /apps/mysql/support-files
上传 my.cnf 到 /apps/mysql/my.cnf #这一步的my-default.cnf 在mysql 5.7 版本中没有发现,
cp mysql.server /etc/init.d/mysql
vim /etc/init.d/mysql #若mysql的安装目录是/usr/local/mysql,则可省略此步
修改文件中的两个变量值
basedir=/apps/mysql
datadir=/apps/mysql/data
 
5.配置环境变量

vim /etc/profile
export MYSQL_HOME="/apps/mysql"
export PATH="$PATH:$MYSQL_HOME/bin"
 
保存退出
source /etc/profile
 
6.添加自启动服务

chkconfig --add mysql
chkconfig mysql on
 
7.启动mysql

service mysql start
 
启动成功后,重启系统
 
8.登录mysql及改密码与配置远程访问

mysqladmin -u root password 'your_password' #修改root用户密码
mysqladmin:command not found解决方法:ln -s /mysql安装路径/bin/mysqladmin /usr/bin
set Password=PASSWORD('daoran1203');
set password for 'root'@'localhost' = PASSWORD('newpass');
update user set password=PASSWORD('newpass') where user='root';
 
mysql 5.7 修改密码:
update mysql.user set authentication_string=password('daoran1203') where User='root';
flush privileges;
 
mysql -u root -p #登录mysql,需要输入密码
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'daoran1203' WITH GRANT OPTION; #允许root用户远程访问并有授权的权限 your_password
mysql>FLUSH PRIVILEGES; #刷新权限
mysql>exit
 
9、开放防火墙3306端口:
#iptables -I INPUT -p tcp --dport 3306 -j ACCEPT #开启3306端口
service iptables save #保存防火墙规则
service iptables restart #重置防火墙规则
 
-------------------------------------------------------------------------------------------------
1.MySQL多实例介绍
1.1.什么是MySQL多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务;
1.2.MySQL多实例的特点有以下几点
1:有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
2:节约服务器资源
3:资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降;
1.3.部署mysql多实例的两种方式
第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;
第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;
1.4.同一开发环境下安装两个数据库,必须处理以下问题
  • 配置文件安装路径不能相同
  • 数据库目录不能相同
  • 启动脚本不能同名
  • 端口不能相同
  • socket文件的生成路径不能相同
但有一点需要说明的是:第3个参数文件的缺省路径指的是basedir(安装目录),可通过它来隔离各实例的参数文件,因此一台服务器也就可搭建多个MySQL实例了。
2.Mysql多实例安装部署
2.1.部署环境
Red Hat Enterprise Linux Server release 6.9
2.2.安装mysql软件版本
2.2.1.免编译二进制包
mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
 
――解压安装包
将二进制安装包解压到/apps/目录中,并改名为mysql,这是二进制包编译时basedir参数的缺省目录。
# tar zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /apps/
# cd /apps/
# mv mysql-5.6.40-linux-glibc2.12-x86_64 mysql
――拷贝解压后的mysql,生成如下两个文件夹,以用作两个实例的安装目录
# cd /apps/
# cp -r mysql mysql3307
# cp -r mysql mysql3308 (注意/mysql3308/data/auto.cnf要删掉)
# ll
drwxr-xr-x 12 root root 4096 Sep 27 14:33 mysql
drwxr-xr-x 12 root root 4096 Sep 27 14:36 mysql3307
drwxr-xr-x 12 root root 4096 Sep 27 14:37 mysql3308
备注:此处保留mysql这个目录,是为了配置硬连接,以便在任何目录下,都可以访问mysql客户端程序。
 
#chown -R mysql:mysql mysql
#chown -R mysql:mysql mysql3307
#chown -R mysql:mysql mysql3308
 
2.3 创建系统数据库
为两个MySQL实例创建系统数据库,basedir分别为/apps/mysql3307、/apps/mysql3308,datadir分别为/apps/mysql3307/data、/apps/mysql3308/data,如下:
# cd /apps/mysql/scripts
# ./mysql_install_db --user=mysql --basedir=/apps/mysql3307 --datadir=/apps/mysql3307/data
# ./mysql_install_db --user=mysql --basedir=/apps/mysql3308 --datadir=/apps/mysql3308/data
 
3. 配置参数文件
为了使每个MySQL实例拥有独立的参数文件,将其存放在各自的安装目录下(basedir),且需保证缺省路径下不存在参数文件,以防读取错误。
假设参数文件已配置好,端口分别为3307、3308,basedir分别为/apps/mysql3307、/apps/mysql3308 ,datadir分别为/apps/mysql3307/data、/apps/mysql3308/data。
#vim /apps/mysql/my.cnf
[client]
socket=/apps/mysql/mysql.sock
 
[mysqld]
basedir = /apps/mysql
datadir = /apps/mysql/data
port = 3306
server_id = 1
socket = /apps/mysql/mysql.sock
pid-file = /apps/mysql/data/linux-node4.example.com.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
#vim /apps/mysql3307/my.cnf
[client]
socket=/apps/mysql3307/mysql.sock
 
[mysqld]
basedir = /apps/mysql3307
datadir = /apps/mysql3307/data
port = 3307
server_id = 2
socket = /apps/mysql3307/mysql.sock
pid-file = /apps/mysql3307/data/linux-node4.example.com.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
#vim /apps/mysql3308/my.cnf
[client]
socket=/apps/mysql3308/mysql.sock
 
[mysqld]
basedir = /apps/mysql3308
datadir = /apps/mysql3308/data
port = 3308
server_id = 3
socket = /apps/mysql3308/mysql.sock
pid-file = /apps/mysql3308/data/linux-node4.example.com.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
4. 启动实例
这种情况下,可在启动实例时通过--defaults-file为其指定一个参数文件,如下:
# mysqld_safe --defaults-file=/apps/mysql3307/my.cnf &
# mysqld_safe --defaults-file=/apps/mysql3308/my.cnf &
关闭实例时,同样需要指定其参数文件,否则会失败。
# mysqladmin --defaults-file=/apps/mysql3307/my.cnf shutdown
# mysqladmin --defaults-file=/apps/mysql3308/my.cnf shutdown
 
5. 修改为服务管理方式(这步配置成功,就不用第4步骤启动实例那么麻烦了)
二进制包没有采用缺省参数文件,所以修改为服务管理方式稍微有点复杂,需要修改服务启动文件中的basedir、datadir参数,如下:
――拷贝服务文件
# cp /apps/mysql/support-files/mysql.server/etc/rc.d/init.d/mysql3307
# cp /apps/mysql/support-files/mysql.server/etc/rc.d/init.d/mysql3308
――添加服务
# chkconfig --add mysql3307
# chkconfig --add mysql3308
――修改服务启动文件
编辑两个服务启动文件,修改basedir、datadir参为合适的路径,如下:
# vi /etc/rc.d/init.d/mysql3307
basedir=/apps/mysql3307
datadir=/apps/mysql3307/data
 
# vi /etc/rc.d/init.d/mysql3308
basedir=/apps/mysql3308
datadir=/apps/mysql3008/data
备注:通过显式设置basedir,以使每个MySQL实例拥有独立的参数文件。
――启动服务
# service mysql3307 start
Starting MySQL.. [ OK ]
# service mysql3308 start
Starting MySQL.. [ OK ]
# service mysql3307 status
MySQL running (30326) [ OK ]
# service mysql3308 status
MySQL running (29755) [ OK ]
修改为服务管理方式后,启动、关闭服务方便了,
 
但在本地登录数据库,还需指定socket文件,因为缺省的/apps/mysql3307/mysql.sock并不存在,如:
# mysql -uroot -p -S /apps/mysql3307/mysql.sock
# mysql -uroot -p -S /apps/mysql3308/mysql.sock
 
-------------------------------------------------------------------
mysql主从复制配置
在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的。譬如服务器发生故障,
没有备份服务器来提供服务的话,业务就得停止.
mysql主从复制用途
  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务
 
主从部署必要条件:
  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库
原理:
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求 主库 的binlog,并将得到的binlog日志写到relay log(中继日志)文件中;
主库会生成一个log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
 
 
mysql主从复制存在的问题:
  • 主库宕机后,数据可能丢失
  • 从库只有一个sql Thread,主库写压力大,复制很可能延时
 
解决方法:
  • 半同步复制---解决数据丢失的问题
  • 并行复制----解决从库复制延迟的问题
 
主从复制配置如下:
在主服务器上操作:
1、确保/etc/my.cnf中有如下参数,没有的话需手工添加,并重启mysql服务。
[mysqld]
log-bin=mysql-bin #启动二进制文件
server-id=1 #服务器ID
 
2、登录mysql,在mysql中添加一个backup的账号,并授权给从服务器。
[root@localhost ~]# mysql -uroot –p
mysql> grant replication slave on *.* to 'backup'@'192.168.56.%' identified by 'backup';
#创建backup用户,并授权给192.168.48.130使用。
msyql> flush privileges;
 
3、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
mysql> show master status;
 
在从服务器上操作:
1)、确保/etc/my.cnf中有log-bin=mysql-bin和server-id=1参数,并把server-id=1修改为server-id=10。修改之后如下所示:
[mysqld]
log-bin=mysql-bin #启动二进制文件
server-id=10 #服务器ID
2)、重启mysql服务。
[root@localhost ~]# service mysql restart
 
3)、登录mysql,执行如下语句
[root@localhost ~]# mysql -uroot –p
mysql> change master to master_host='192.168.56.14',master_port=3307,master_user='backup',master_password='backup',master_log_file='mysql-bin.000003',master_log_pos=401;
 
 
说明:红色标注的根据主服务器实际参数填写
4)、启动slave同步。
mysql> start slave;
 
验证配置是否正常,mysql主从能否正常复制。
在主数据库上新建一个库,并且在库中写一个表和一些数据。
[root@localhost ~]# mysql -uroot –p123456
mysql> create database mysqltest;
mysql> use mysqltest;
mysql> create table user(id int(5),name char(10));
mysql> insert into user values (00001,'zhangsan');

 

 
在从数据库中验证一下,是否正常复制到数据。
[root@localhost ~]# mysql -uroot –p123456
mysql> show databases;

 

mysql> select * from mysqltest.user;

 

从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据
已经复制到我们的从数据库中了。
 
posted @ 2018-09-12 17:06  小蘇  阅读(261)  评论(0编辑  收藏  举报