环境:centos 6.9 x64


先下载mysql安装包



打开 http://dev.mysql.com/downloads/mysql/



选择 linux - Generic




mysql存入二进制流 mysql二进制安装教程_mysql

 



下载完毕后,得到安装包 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




mysql存入二进制流 mysql二进制安装教程_mysql_02


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 #重置防火墙规则

 


-------------------------------------------------------------------------------------------------


linux下mysql多实例安装


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');


mysql存入二进制流 mysql二进制安装教程_mysql存入二进制流_03

 


 


在从数据库中验证一下,是否正常复制到数据。

[root@localhost ~]# mysql -uroot –p123456

mysql> show databases;


mysql存入二进制流 mysql二进制安装教程_操作系统_04

 


mysql> select * from mysqltest.user;


mysql存入二进制流 mysql二进制安装教程_mysql存入二进制流_05

 


从上图中的结果,我们可以看到mysql主从复制已经在起作用了,我们在主数据库中写入的数据


已经复制到我们的从数据库中了。