您的位置:首页 > 运维架构 > Linux

centos6.8下mysql5.6源码安装并实现主从同步

2016-07-14 14:12 731 查看
mysql源码下载:

http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz

http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz

上一篇文章的mysql主从同步基于mysql-5.1版本,基于yum安装的,mysql版本较低,然而发现mysql-5.1.7之后,主从配置有了变化,master-host等配置属性在mysql-5.1.7之后不再使用,所以如果还是这么配置会报错,接下来学习mysql-5.6.21的源码指定目录安装。

本来是下载了mysql-5.7.13的最新版本进行安装,但是安装过程中遇到了很多问题,一开始预编译出问题,后来编译阶段出问题,所以建议如果要安装5.7版本的mysql,最好centos版本是7以上的版本,所以后来就重新下载了5.6.21这个版本安装,就可以了。

环境:centos6.8+mysql-5.6.21

一:mysql源码安装

1.准备安装环境

首先检查是否已经安装过mysql:

[root@dzy src]# rpm -qa | grep mysql

有的话就卸载掉以前安装的mysql:

[root@dzy src]# rpm -e –nodeps xxx(xxx是搜索结果)

并删除所有的相关文件:

/etc/my.cnf

这里我centos6.8查出一个包,但是通过rpm -e –nodeps xxx命令没有移除,提示不存在的安装包,我就没有理会,继续接下来的步骤

2.编译和安装

安装编译代码所需要的包

[root@dzy src]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio

[root@dzy src]# yum install libaio libaio-devel -y

// 下面两个是centos7才能安装

[root@dzy src]# yum install perl-Data-Dumper -y

[root@dzy src]# yum install net-tools -y

3.创建目录

创建安装目录

mkdir /usr/local/ mysql

创建数据目录

mkdir /usr/local/ mysql/data

创建源码存放目录

mkdir /usr/local/src

4.创建mysql用户组和mysql用户

检查系统是否已经有mysql用户,如果没有则创建

[root@dzy mysql-5.6.21]# cat /etc/passwd | grep mysql

[root@dzy mysql-5.6.21]# cat /etc/group | grep mysql

创建mysql用户(但是不能使用mysql账号登陆系统)

[root@dzy mysql-5.6.21]# groupadd mysql

[root@dzy mysql-5.6.21]# useradd -g mysql -s /sbin/nologin mysql

5.授予目录用户权限

[root@dzy mysql-5.6.21]# chown -R mysql:mysql /usr/local/mysql

6.下载mysql-5.6.21版本

[root@dzy mysql-5.6.21]# cd /usr/local/src

[root@dzy src]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.21.tar.gz

[root@dzy src]#tar -zxvf mysql-5.6.21.tar.gz

[root@dzy src]#cd mysql-5.6.21

7.解压安装包并编译安装

[root@dzy src]# tar xvf mysql-5.6.21.tar.gz

[root@dzy src]# cd mysql-5.6.21

[root@dzy mysql-5.6.21]#cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DSYSCONFDIR=/etc \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_MEMORY_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \

-DMYSQL_TCP_PORT=3306 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

如果没有出现error错误,并提示Buid files have been written to :/usr/local/src/mysql-5.6.21则表示编译成功

[root@dzy src]# make && make install

至此,mysql安装完成

cd /usr/local/mysql 目录去查看如下图:



二:配置mysql实例

1.单实例配置(我没做实验了)

单实例配置方法

进入安装路径

[root@localhost mysql-5.6.25]# cd /usr/local/mysql

进入安装路径,执行初始化配置脚本,创建系统自带的数据库和表

[root@localhost mysql]# scripts/mysql_install_db –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –user=mysql

注:在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索”$basedir/my.cnf”,在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置!

注意:在CentOS 7版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。

在使用”yum update”更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题。

添加防火墙

[root@localhost mysql]# firewall-cmd –zone=public –add-port=3306/tcp –permanent

[root@localhost mysql]# firewall-cmd –reload

启动mysql

添加服务,拷贝服务脚本到init.d目录,并设置开机启动

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysql

[root@localhost mysql]# chkconfig mysql on

[root@localhost mysql]# service mysql start –启动MySQL

查看mysql是否启动成功

[root@localhost mysql]# netstat -lntp | grep 3306

如果mysql没有启动成功,到目录/usr/local/mysql/data下查看错误日志

[root@localhost data]# tail localhost.localdomain.err (localhost.localdomain是主机名)

如果没有生成日志目录,则mysql安装没有成功(再重新编译安装一次)

重启mysql

首先杀死mysql进程

[root@localhost 3306]# pkill mysqld

然后检查是否已经杀死mysql进程

[root@localhost 3306]# netstat -lntp | grep 3306

此时shell没有任何输出,表明已经杀死了mysql进程

然后重启mysql并再次检查是否启动成功

[root@localhost 3306]# service mysql start

[root@localhost 3306]# netstat -lntp | grep 3306

2.多实例配置

什么是多实例

简单地说,就是在一台机器上开启多个不同的服务端口,运行多个mysql服务进程,这些服务进程通过不同socket监听不同服务端口来提供各自的服务。

这些mysql多实例公用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件,在提供服务时,多实例在逻辑上看起来是各自独立的,多个实例之间根据配置文件的设定值,来取得相关服务器的硬件资源

多实例配置方法

在本文中,通过在mysql上开启两个端口(3306和3307来配置多实例,因为下面的主从同步要使用这两个端口来模拟)

创建目录(log目录是存放mysql日志的地方)

[root@dzy mysql]# mkdir -p /data/{3306,3307}/data

[root@dzy mysql]# mkdir -p /data/{3306,3307}/log

修改文件拥有者和权限

[root@localhost 3307]# chown -R mysql:mysql /data

[root@localhost 3307]# find /data -name mysql -exec chmod 700 {} \;

在/data/3306中新建my.cnf

[root@dzy mysql]# cd /data/3306

[root@dzy mysql]# vi my.cnf

把如下内容拷贝到该文件中

[client]

port = 3306

socket = /data/3306/mysql.sock

[mysqld]

port=3306

socket = /data/3306/mysql.sock

pid-file = /data/3306/data/mysql.pid

basedir = /usr/local/mysql

datadir = /data/3306/data

server-id=1

#log-bin=mysql-bin

#log-bin-index= mysql-bin.index

# LOGGING

log_error=/data/3306/log/mysql-error.log

slow_query_log_file=/data/3306/log/mysql-slow.log

slow_query_log=1

同样地,在/data/3307中新建my.cnf

[root@dzy 3306]# cp my.cnf /data/3307/my.cnf

修改3307的my.cnf文件中的3306变成3307

server-id=2

检查一下目录结构,看看有没有把文件放错地方

[root@dzy 3307]# tree /data

/data

├── 3306

│ ├── data

│ ├── log

│ └── my.cnf

└── 3307

│ ├── data

│ ├── log

│ └── my.cnf

这个命令我的系统没安装,所以没呈现,自己查看一下就可以了。

创建启动文件

在/data/3306中新建mysql启动文件

[root@dzy mysql]# cd /data/3306

[root@dzy mysql]# vi mysql

把如下内容拷贝到该文件中

#!/bin/sh

port=3306

mysql_user=”root”

mysql_pwd=””

CmdPath=”/usr/local/mysql/bin”

#startup function

function_start_mysql()

{

printf “Starting MySQL…\n”

#$$

/bin/sh ${CmdPath}/mysqld_safe –defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

}

#stop function

function_stop_mysql()

{

printf “Stoping MySQL…\n”

${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown

}

#restart function

function_restart_mysql()

{

printf “Restarting MySQL…\n”

function_stop_mysql

sleep 2

function_start_mysql

}

case $1 in

start)

function_start_mysql

;;

stop)

function_stop_mysql

;;

restart)

function_restart_mysql

;;

*)

printf “Usage: /data/${port}/mysql {start|stop|restart}\n”

esac

同理,在/data/3307中新建mysql启动文件

[root@dzy mysql]# cd /data/3307

[root@dzy mysql]# vi mysql

把如下内容拷贝到该文件中

#!/bin/bash

port=3307

mysql_user=”root”

mysql_pwd=””

CmdPath=”/usr/local/mysql/bin”

#startup function

function_start_mysql()

{

printf “Starting MySQL…\n”

/bin/sh ${CmdPath}/mysqld_safe –defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

}

#stop function

function_stop_mysql()

{

printf “Stoping MySQL…\n”

${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown

}

#restart function

function_restart_mysql()

{

printf “Restarting MySQL…\n”

function_stop_mysql

sleep 2

function_start_mysql

}

case $1 in

start)

function_start_mysql

;;

stop)

function_stop_mysql

;;

restart)

function_restart_mysql

;;

*)

printf “Usage: /data/${port}/mysql {start|stop|restart}\n”

esac

添加mysql启动路径的环境变量

[root@dzy 3307]# echo ‘export PATH=$PATH:/usr/local/mysql/bin’ >>/etc/profile

[root@dzy 3307]# source /etc/profile

[root@dzy 3307]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

初始化数据库

[root@dzy scripts]# cd /usr/local/mysql/scripts

[root@dzy scripts]# ./mysql_install_db –defaults-file=/data/3306/my.cnf –user=mysql –basedir=/usr/local/mysql –datadir=/data/3306/data

[root@dzy scripts]# ./mysql_install_db –defaults-file=/data/3307/my.cnf –user=mysql –basedir=/usr/local/mysql –datadir=/data/3307/data

启动mysql

分别启动两个端口

[root@dzy scripts]# /data/3306/mysql start

Starting MySQL…

[root@dzy scripts]# /data/3307/mysql start

Starting MySQL…

[root@localhost scripts]# netstat -lntp | grep 330

tcp6 0 0 :::3306 :::* LISTEN 33556/mysqld

tcp6 0 0 :::3307 :::* LISTEN 34204/mysqld

可以看到两个端口都已经启动成功

登陆mysql

刚安装完的mysql是没有登陆密码的

[root@dzy scripts]# mysql -S /data/3306/mysql.sock

如果不成功,检查/data/3306/log目录下的mysql-error.log日志,逐一排除错误

如果登陆成功,下面就修改登录密码(不建议在shell环境下修改密码,否则别人只要查看命令历史就能看到密码(前提是你没有情况命令历史))

mysql> update mysql.user set password=password(“123456”) where user=’root’;

mysql> flush privileges;

同理,使用上面的方法修改3307的登陆密码

要把上面更改后的密码写回到mysql的启动文件中(否则每次启动、关闭、重启mysql都要输入密码)

// 这一步我没操作了

[root@localhost 3306]# sed -i ‘s/mysql_pwd=\”\”/mysql_pwd=\”123456\”/g’ /data/3306/mysql

[root@localhost 3306]# sed -i ‘s/mysql_pwd=\”\”/mysql_pwd=\”123456\”/g’ /data/3307/mysql

注意把上面的123456改为设置的密码

重启mysql

[root@localhost 3306]# /data/3306/mysql restart

[root@localhost 3306]# netstat -lntp | grep 330

tcp6 0 0 :::3306 :::* LISTEN 35430/mysqld

可以看到3306端口重启成功,同理可以重启3307端口

至此,mysql-5.6.21在CentOS6.8上安装完毕

三:主从配置

建议关闭防火墙来测试:

service iptables stop;

用户授权

登陆mysql

[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot

mysql>grant all on . to user3306@192.168.0.3 identified by ‘root’;

mysql>select user,host,password from mysql.user;

查看是否授权



同一个主机上的两个实例也可以实现主从同步

[root@dzy 3306]#vi /data/3306/my.cnf

开启二进制日志如下图



[root@dzy 3306]#vi /data/3307/my.cnf



重启mysql

[root@dzy 3306]# /data/3306/mysql restart

[root@dzy 3306]# /data/3307/mysql restart

查看是否开启日志

登陆3306端口

[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot

通过mysql指令来查看bin-log日志是否开启

mysql>show variables like “%log_bin%”



log_bin的值为on则为开启。

查看二进制文件

mysql>show master status;



登陆3307端口,开启主从库的同步

[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot

mysql>change master to master_host = ‘192.168.0.3’,master_user=’user3306’,

master_password=’root’,master_log_file=’mysql-logbin-3306.000003’,

master_log_pos=431;

mysql>start slave;

开启同步

查看是否开启成功

mysql>show slave status \G;



如果红框里的值都是yes,则开启成功。

注意:在执行开启同步的语句时,有一个master_log_file的属性值配置,如果在3306主库执行flush logs,二进制文件回变更会不会影响主从同步呢,经过实验,是不影响的。

这里说一下,如果要实现添加从库,从库的起始数据应该从主库copy一份,为了保证主库与从库数据保持一致必须涉及到读锁和写锁的锁定

1.主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)

mysql> flush tables with read lock;

2.查看主数据库的状态(并记录下File字段名称和Position字段的值,在配置从服务器时有用到,同步从该文件开始的指定位置开始同步)

mysql> show master status;

3.创建主数据库的快照文件

[root@dzy 3306]#mysqldump -uroot -proot -h127.0.0.1 -P3306 –all-databases –triggers –routines –events >>/root/all.sql

4.解锁主数据库的锁表操作

mysql> unlock tables;

5.在从数据库服务器上导入第七步创建的快照文件到从数据库中

[root@dzy 3306]# mysql -uroot -proot -h127.0.0.1 -P3306 < /root/all.sql

6.在从数据库服务器上设置主数据库服务器向从数据库服务器同步

// 以上1,2,3,4步可以用

mysql>mysqldump -uroot -proot test -l(开启读锁) -F(从当前开启flush logs) >/root/all.sql

这语句来代替,之后在回到5,6最后两步骤。

验证同步(这里我就直接在从库建个相应的表做一下测试):

登陆

[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot



[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot



[root@dzy 3306]# mysql -S /data/3306/mysql.sock -uroot -proot

mysql>insert into test3306 values(6);



[root@dzy 3306]# mysql -S /data/3307/mysql.sock -uroot -proot



如上图所示,主库插入一个6后,从库也就相应的插入6

这里我也把这个多实例当从库,跟另一个主机的单实例mysql主库做了主从同步,也是可以的,注意,在从库切换主库同步的时候,从库一定要关闭当前的同步

stop slave;

以上的mysql多实例源码安装大多来源于以下文章,感谢博主的分享学习:

http://www.linuxidc.com/Linux/2015-06/119354.htm

http://www.linuxidc.com/Linux/2014-12/110752.htm

http://www.linuxidc.com/Linux/2014-06/103752.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql5-6安装