1.CentOs6.6 安装mysql5.5
转自:http://blog.itpub.net/29485627/viewspace-2135947/
0丶首先保证服务器中没有mysql,可以先卸载一下(可以自己搜一下卸载mysql)
1、yum remove mysql mysql-server mysql-libs compat-mysql51
2、rm -rf /var/lib/mysql
3、rm /etc/my.cnf
rpm -qa|grep mysql
1丶下载二进制包
2、删除etc目录下的my.cnf文件
rm /etc/my.cnf
3、执行以下命令来创建mysql用户组
[root@localhost~]# groupadd mysql
4、执行以下命令来创建一个用户名为mysql的用户并加入mysql用户组
[root@localhost ~]# useradd -g mysql mysql
5、将下载的二进制压缩包放到/usr/local/目录下。
[root@localhost ~]# mv mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz /usr/local/
6、解压安装包
[root@localhost ~]# cd /usr/local
[root@localhost localtar]# tar -zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz /usr/local/
7、将解压好的文件夹重命名为mysql
[root@localhost local]# mv mysql-5.6.35-linux-glibc2.5-x86_64 mysql
在etc下新建配置文件my.cnf,添加以下内容
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/tmp/mysql.sock
[mysqld]
server-id=1
#开启二进制日志
log-bin=mysql-bin
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
进入安装mysql软件目录
[root@localhost local]# cd mysql
[root@localhost mysql]# chown -R mysql:mysql ./ 修改当前目录拥有者为mysql用户
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql 安装数据库
[root@localhost mysql]# chown -R mysql:mysql data 修改当前data目录拥有者为mysql用户
[root@localhost mysql]# chown 777 /etc/my.cnf
(1)复制启动脚本到资源目录
[root@localhost mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
(2)增加mysqld服务控制脚本执行权限
[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld
(3)将mysqld服务加入到系统服务
[root@localhost mysql]# chkconfig --add mysqld
(4)检查mysqld服务是否已经生效
[root@localhost mysql]# chkconfig --list mysqld
命令输出类似下面的结果:
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
表明mysqld服务已经生效,在2、3、4、5运行级别随系统启动而自动启动,以后可以使用service命令控制mysql的启动和停止。
3、启动msql
[root@localhost mysql]# service mysqld start
4、将mysql的bin目录加入PATH环境变量,编辑/etc/profile文件
[root@localhost mysql]# vi /etc/profile
在文件最后添加如下信息:
export PATH=$PATH:/usr/local/mysql/bin
执行下面的命令使所做的更改生效:
[root@localhost mysql]# . /etc/profile
5、以root账户登陆mysql,默认没有密码
[root@localhost mysql]# mysql
6、设置root账户密码
mysql > use mysql
mysql > update user set password=password('123456') where user='root' and host='localhost';
mysql > flush privileges;
mysql > exit
7、用密码重新登录
[root@localhost mysql]# mysql -u root -p
Enter password:
8、设置远程主机登录
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
这里123456是密码,若密码是其他值,改一下即可。其他不需要改。
2.实现主从复制
转自:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2
主:192.168.100.21
从:192.168.100.22
需要注意 mysql的主从复制(就是二进制文件的共享)
之前的第一台mysql 的server-id =1 ,第二台mysql 的server-id=2 ;其他不用修改
在第一台(主)机器上创建第二台主机能登录的用户
1.GRANT REPLICATION SLAVE ON *.* TO 'mysql12' @'192.168.100.22' IDENTIFIED BY 'mysql12';
mysql12:是用户名和密码
192.168.100.22:(slave从)第二台机器
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
在第二台(从)机器上
1.change master to master_host='192.168.100.21', master_user='mysql12', master_password='mysql12', master_log_file='mysql-bin.000004', master_log_pos=342;
2.START SLAVE;
3.SHOW SLAVE STATUS\G;
现在你可以试试,在主添加数据,从会不会同步;
3.主主复制
转自:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2
和主从复制一样,只不过是颠倒一下;
# 在原来的基础上,配置文件
# 主:192.168.100.21
# 从:192.168.100.22
# 在原来的:log-bin=mysql-bin #开启二进制日志
# 下添加
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql #忽略mysql库 mysql5.7 不支持,最好不写
binlog-ignore=information_schema #忽略information_schema库mysql5.7 不支持,最好不写
replicate-do-db=aa #要同步的数据库,默认所有库
# 在192.168.100.22执行
1.GRANT REPLICATION SLAVE ON *.* TO 'mysql11' @'192.168.100.21' IDENTIFIED BY 'mysql11';
2.FLUSH PRIVILEGES;
3.show master status;
# 在192.168.100.21执行
1.change master to master_host='192.168.100.22', master_user='mysql11', master_password='mysql11', master_log_file='mysql-bin.000005', master_log_pos=352;
2.start slave;
3.SHOW SLAVE STATUS\G;
现在,你看看,是不是主从任意一个操作数据库都会同步;
4.高可用
转自:https://www.cnblogs.com/phpstudy2015-6/p/6706465.html#_label17
两台linux:
192.168.100.31 : haproxy+keepalived
192.168.100.32 : haproxy+keepalived
4.1 haproxy安装
-
下载haproxy-1.5.14.tar.gz
-
解压,编译安装
cd haproxy-1.5.14
uname -a :可以查看以下配置(2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)
make TARGET=linux26 ARCH=x86_64
make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/
- 添加启动脚本在:etc/init.d/haproxy
#!/bin/sh
#
# haproxy
#
# chkconfig: - 85 15
# description: HAProxy is a free, very fast and reliable solution \
# offering high availability, load balancing, and \
# proxying for TCP and HTTP-based applications
# processname: haproxy
# config: /etc/haproxy/haproxy.cfg
# pidfile: /var/run/haproxy.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
exec="/usr/sbin/haproxy"
prog=$(basename $exec)
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy
check() {
$exec -c -V -f $cfgfile $OPTIONS
}
start() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
echo -n $"Starting $prog: "
# start it up here, usually something like "daemon $exec"
daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
# stop it here, often "killproc $prog"
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
stop
start
}
reload() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
echo -n $"Reloading $prog: "
$exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
retval=$?
echo
return $retval
}
force_reload() {
restart
}
fdr_status() {
status $prog
}
case "$1" in
start|stop|restart|reload)
$1
;;
force-reload)
force_reload
;;
check)
check
;;
status)
fdr_status
;;
condrestart|try-restart)
[ ! -f $lockfile ] || restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
exit 2
esac
4.给这个目录授权
chmod +x /etc/init.d/haproxy
- 建立脚本启动用户
useradd -r haproxy
- 在 /etc/haproxy/haproxy.cfg 创建配置文件
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2 #日志定义级别
chroot /var/lib/haproxy #当前工作目录
pidfile /var/run/haproxy.pid #进程id
maxconn 4000 #最大连接数
user haproxy #运行改程序的用户
group haproxy
daemon #后台形式运行
stats socket /var/lib/haproxy/stats
defaults
mode tcp #haproxy运行模式(http | tcp | health)
log global
option dontlognull
option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 #三次连接失败则服务器不用
timeout http-request 10s
timeout queue 1m
timeout connect 10s #连接超时
timeout client 1m #客户端超时
timeout server 1m #服务器超时
timeout http-keep-alive 10s
timeout check 10s #心跳检测
maxconn 600 #最大连接数
listen stats #配置haproxy状态页(用来查看的页面)
mode http
bind :8888
stats enable
stats hide-version #隐藏haproxy版本号
stats uri /haproxyadmin?stats #一会用于打开状态页的uri
stats realm Haproxy\ Statistics #输入账户密码时的提示文字
stats auth admin:admin #用户名:密码
frontend main
bind 0.0.0.0:3306 #使用3306端口。监听前端端口【表示任何ip访问3306端口都会将数据轮番转发到mysql服务器群组中】
default_backend mysql #后端服务器组名
backend mysql
balance leastconn #使用最少连接方式调度
server mysql1 192.168.100.21:3306 check port 3306 maxconn 300
server mysql2 192.168.100.22:3306 check port 3306 maxconn 300
最好把注释去掉
- 启动日志
vi /etc/rsyslog.conf
去掉注释,重新启动
service rsyslog restart
- 启动haproxy
service haproxy start
- 访问
http://192.168.100.31:8888/haproxyadmin?stats
为啥,看这↓
这就好了;
第二台的安装也是一样
4.2 keepalived安装
- 下载keepalived-1.2.19.tar.gz
- 解压,安装
cd keepalived-1.2.19
–with-kernel-dir下面的配置还是: uname -a 查看
./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/
- 安装依赖
yum -y install openssl openssl-devel
- 编译
make && make install
chkconfig keepalived on
- 查看目录结构是否有变化
- 配置文件
把 /etc/keepalived/keepalived.conf 改个名叫keepalived.conf.back
再vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
notificationd LVS_DEVEL
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy {
script "/etc/keepalived/chk.sh" #具体脚本路径
interval 2 #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 { #VI_1 是自定义的名称;
state BACKUP #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
nopreempt #开启不抢占
interface eth0 #指定VIP需要绑定的物理网卡
virtual_router_id 11 #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
priority 130 #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台
advert_int 1 #生存检测时的组播信息发送间隔,组内一致
authentication { #设置验证信息,组内一致
auth_type PASS #有PASS 和 AH 两种,常用 PASS
auth_pass asd #密码
}
virtual_ipaddress {
192.168.100.55 #指定VIP地址,组内一致,可以设置多个IP
}
track_script { #使用在这个域中使用预先定义的脚本,上面定义的
chk_haproxy
}
notify_backup "/etc/init.d/haproxy restart" #表示当切换到backup状态时,要执行的脚本
notify_fault "/etc/init.d/haproxy stop" #故障时执行的脚本
}
第二台的配置文件,把 priority 120改了就行了;
最好把注释去掉
- 创建脚本
vi /etc/keepalived/chk.sh
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
- 授权
chmod +x /etc/keepalived/chk.sh
- 启动keepalived
service keepalived start
注意keepalived启动后会虚拟一个VIP,也就是192.168.100.55 可以通过访问:http://192.168.100.55:8888/haproxyadmin?stats 查看VIP是那台主机
3.测试haproxy监听前端端口3306
在mysql1和mysql2中各创建一个,另外两台都可以登录的用户;
mysql>GRANT ALL ON *.* TO 'jack'@'192.168.100.%' IDENTIFIED BY '321';
用户名:jack
密码:321
在windows上试试可以登录吗?应该是可以的;
mysql -u jack -p -h192.168.100.55
如果不行,看看你的两个keepalived主机是否把3306端口放开了~~~(防火墙)
4.你可以再测试一下,他会不会抢占VIP
就是VIP是那个,你就 kill -9 pid 看看VIP会不会变
再启动那个,再看看VIP变不变
5.测试负载均衡
在mysql1和mysql2上抓包
tcpdump -n -i eth0 host 192.168.100.21 and 192.168.100.32(看VIP是谁,就写谁,我的是32)
tcpdump -n -i eth0 host 192.168.100.22 and 192.168.100.32(看VIP是谁,就写谁,我的是32)
多个客户端(Navicat和SQLyog)同时执行添加操作,看看;
6.mysql任意一个挂掉后将会被踢出群组,再启动那个mysql,进入群组,同步数据
再启动,又变成绿色;