频道栏目
首页 > 数据库 > MySQL > 正文

mysql源码编译安装

2018-02-03 14:32:11      个评论    来源:xinhao233的博客  
收藏   我要投稿

一、安装:

方法一:

1、yum install mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm -y
2、/etc/init.d/mysqld start
3、grep password /var/log/mysqld.log #找初始密码
4、mysql_secure_installation #安全设置

方法二:
源码编译安装,在Lnmp架构中已经演示,这里不再演示

二、主从复制:

(1)利用日志复制:

server121(主):

1、vim /etc/my.cnf

server-id=1 #唯一的id,
log-bin=mysql-bin   #激活二进制日志,一般都会开启

2、/etc/init.d/mysqld restart
3、cd /var/lib/mysql
4、mysqlbinlog mysql-bin.000001 #查看二进制日志信息
mysql -p
5、>>grant replication slave on . to student@’172.25.34.%’ identified by ‘Westos@233’; #设置从机

6、>>flush privileges; #重载授权表
7、>>show master status;
8、>>create database test;
9、>>use test;
10、>>create table info(username varchar(20) not null ,password varchar(20) not null);
11、>>insert into info values(‘user1’,’123’);

这里写图片描述

server122(从):

12、vim /etc/my.cnf

server-id=2 #唯一的id,区别于主机

13、/etc/init.d/mysqld restart
14、mysql -p
15、change master to master_host’172.25.34.4’,master_user=’student’,master_password=’student’,master_log_file=’mysql-bin.000001’,master_log_pos=345; #同步主机
16、start slave; #开启从机同步主机服务
17、show slave status\G #展示同步信息
这里写图片描述
这里写图片描述

测试:

server122:

18、>>show databases;
这里写图片描述

server121

19、>>insert into info values(‘user2’,’456’);
20、>>show databases;

server122:

21、>>show databases;
这里写图片描述

(2)、利用gtid复制
实际中,不可能去手动查日志来复制数据,因此引入了gtid来复制

server121;

1、vim /etc/my.cnf

gtid_mode=ON
enforce-gtid-consistency=true

2、/etc/init.d/mysqld restart

server122;

1、vim /etc/my.cnf

gtid_mode=ON
enforce-gtid-consistency=true

2、/etc/init.d/mysqld restart
3、>>stop slave;
4、>>change master to %master_host=’172.25.254.121’,master_user=’student’,master_password=’Westos@233’,master_auto_position=1;
5、>>start slave;
6、>>show slave status\G
这里写图片描述

测试:

server122:

这里写图片描述

三、读写分离:

在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。

原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库

MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

server123:

1、tar -zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
2、mv mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy
3、mkdir mysql-proxy/etc/ mysql-proxy/log
4、vim /usr/local/mysql-proxy/etc/mysql-proxy.conf

[mysql-proxy]
user=root   ###以什么身份登陆proxy
daemon=true 
keepalive=true  ###后台运行
log-level=debug ###日志级别
log-file =/usr/local/mysql-proxy/log/mysql-proxy.log    ###日志位置
admin-username=admin    ###管理用户
admin-password=Westos@233
admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua   ###脚本
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua  ###核心分离脚本位置
proxy-address=172.25.254.123:3306   ###管理主机
proxy-backend-addresses=172.25.254.121:3306 ###主机master
proxy-read-only-backend-addresses=172.25.254.122:3306   ###从机slave
plugins=proxy,admin ###调用模块

5、vim mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 2,
            is_debug = false
        }
end

6、chmod 660 /usr/local/mysql-proxy/etc/mysql-proxy.conf
7、bin/mysql-proxy –defaults-file=/usr/local/mysql-proxy/etc/mysql-proxy.conf #开启读写分离控制
这里写图片描述

server121:

1、>>grant select,update,insert on . to admin@’172.25.254.%’ identified by ‘Westos@233’; #因为已经实现了主从复制,所以只需要在master授权即可
2、>>flush privileges;

测试:

在任意一台主机即可远程登陆管理端

mysql -h172.25.254.123 -P 4041 -uadmin -pwestos #管理用户
这里写图片描述
mysql -h172.25.254.123 -ustudent -pWestos@233 登陆即可实现读写分离

异步复制(Asynchronous replication)

MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

全同步复制(Fully synchronous replication)

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

半同步复制(Semisynchronous replication)

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

四、半同步复制的实现:

这里一定要注意,master和slave装的是不同的插件,并且要注意指令的输入顺序

server121(master)

1、>>install plugin rpl_semi_sync_master soname ‘semisync_master.so’; #安装插件
show variables like ‘%rpl_semi_sync%’; #查看插件是否安装
3、>>set global rpl_semi_sync_master_enabled=1; #启动半同步复制
7、>> show status like ‘Rpl_semi_sync_master_status’; #查看半同步是否在运行

8、>>use test;
9、>>insert into info values(‘user6’,’78’);

这里写图片描述

server122(slave)

2、>>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
4、>>set global rpl_semi_sync_slave_enabled =1;
show variables like ‘%rpl_semi_sync%’;

5、>>stop slave io_thread;
6、>>start slave io_thread; #重启从机的IO线程

验证:

在Slave执行stop slave之前,主的insert操作很快就能返回。

在Slave执行stop slave后,主的insert操作需要10.01s才返回,而这与rpl_semi_sync_master_timeout参数的时间相吻合。这时,查看两个状态的值,均为“OFF”了。
这里写图片描述
这里写图片描述

在Slave执行start slave后,主的insert操作很快就能返回,此时,两个状态的值也变为“ON”了。
这里写图片描述

六、组复制(MGR):

这这里防止之前的实验对该实验有影响,重新初始化一下数据库
步骤为:
1、/etc/init.d/mysqld stop
2、rm -rf /var/lib/mysql/*
3、>/var/log/mysqld.log
然后重启即可初始化

server121/122/123:

1、vim /etc/my.cnf

server_id=2 ###id不同
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE    #将复制元数据存储在系统表
relay_log_info_repository=TABLE
binlog_checksum=NONE    #禁用二进制日志事件校验和
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW   #使用基于行的格式

transaction_write_set_extraction=XXHASH64   #指示 server 必须为每个事务收集写集合并使用哈希算法将其编码为散列
loose-group_replication_group_name="4b3ffd83-0626-11e8-9005-525400478134"   #设置组名
loose-group_replication_start_on_boot=off   #指示插件在 server 启动时不自动启动组复制
loose-group_replication_local_address= "172.25.34.4:24901"  ###分别是每台主机的ip
loose-group_replication_group_seeds="172.25.34.3:24901,172.25.34.4:24901,172.25.34.5:24901" #种子成员
loose-group_replication_bootstrap_group= off    #指示插件是否自动引导组
loose-group_replication_single_primary_mode=FALSE
loose-group_replication_enforce_update_everywhere_checks=FALSE
loose-group_replication_ip_whitelist="172.25.34.0/24"

server123:

1、mysql -p
2、>>set sql_log_bin=0; #关闭二进制日志,以避免将更改传递到其他 server
3、>>grant replication slave on . to rpl_user@’%’ identified by ‘Westos@233’; #创建具有slave权限的 MySQL 用户
4、>>flush privileges; #刷新授权表
5、>>set sql_log_bin=1; #开启二进制日志
6、>>CHANGE MASTER TO MASTER_USER=’rpl_user’, MASTER_PASSWORD=’Westos@233’ FOR CHANNEL ‘group_replication_recovery’; #设定组,如果其他组成员需要恢复状态,则这个就是依据
7、>>INSTALL PLUGIN group_replication SONAME ‘group_replication.so’; #安装组复制插件
8、>>SET GLOBAL group_replication_bootstrap_group=ON; #指示引导组
9、>>START GROUP_REPLICATION; #开启组复制
10、>>SET GLOBAL group_replication_bootstrap_group=OFF; #一定要在启动之后关闭,不然在重新启动组复制的时候导致两个不同的组具有相同的名称
11、>>CREATE DATABASE test;

12、>>use test;
13、>>create table t1(c1 int primary key,c2 text not null);
14、>>insert into t1 values (1 , ‘Luis’);
15、>>SELECT * FROM performance_schema.replication_group_members; #检查组成员状态
这里写图片描述

server121/122:

1、>>set sql_log_bin=0;
2、>>grant replication slave on . to rpl_user@’%’ identified by ‘Westos@233’;
3、>>flush privileges;
4、>>set sql_log_bin=1;
5、>>CHANGE MASTER TO MASTER_USER=’rpl_user’, MASTER_PASSWORD=’Westos@233’ FOR CHANNEL ‘group_replication_recovery’; #进组
6、>>INSTALL PLUGIN group_replication SONAME ‘group_replication.so’;

这里与 server123上执行的那些步骤有一个区别,就是不执行 SET GLOBAL group_replication_bootstrap_group = ON 的操作; 在启动组复制之前,因为该组已由 server3创建和引导。 此时,server 121/122只需要添加到已经存在的组中。

7、>>set global group_replication_allow_local_disjoint_gtids_join=ON;
8、>>START GROUP_REPLICATION;
9、>>SELECT * FROM performance_schema.replication_group_members;
这里写图片描述
这里写图片描述

测试:

随便一台主机写入数据,其他主机可以查看:

这里写图片描述

七、高可用(MHA):

server124:manager
server121:master
server122:slave(备用主机)
server123:slave
1、基于gtid主从复制,server121和122的配置文件要一致
2、ssh免密登陆

server121:

(1)gtid主从复制

1、>>grant replication slave on . to repl@’%’ identified by ‘Westos@233’;
2、>>flush privileges;

9、>>grant all on . to root@’%’ identified by ‘Westos@233’;

(2)ssh免密;

1、ssh-keygen
2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server122
3、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server123
4、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server124

server122:

(1)gtid主从复制

3、use mysql;
4、select * from plugin;
5、delete from plugin;
6、grant replication slave on . to repl@’%’ identified by ‘Westos@233’; #备用主机也要允许复制
7、change master to master_host=’172.25.254.121’,master_user=’repl’,master_password=’Westos@233’,master_auto_position=1;
8、start slave;
9、show slave status\G

(2)ssh免密

1、ssh-keygen
2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server121
3、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server123
4、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server124

server123:

(1)gtid主从复制

3、use mysql;
4、select * from plugin;
5、delete from plugin;
6、change master to master_host=’172.25.254.121’,master_user=’repl’,master_password=’Westos@233’,master_auto_position=1;
7、start slave;
8、show slave status\G

(2)ssh免密

1、ssh-keygen
2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server121
3、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server122
4、ssh-copy-id -i /root/.ssh/id_rsa.pub root@server124

server124:

1、mkdir /usr/local/mha
2、vim /usr/local/mha/mha.conf

[server default]
user=root   #数据库管理员用户
password=Westos@233
repl_user=repl  #复制用户
repl_password=Westos@233
ssh_user=root   #ssh免密登陆用户
remote_workdir=/tmp #复制时工作目录
manager_workdir=/usr/local/mha/
manager_log=/usr/local/mha/mha.log
master_binlog_dir=/var/lib/mysql
ping_interval=1
master_ip_failover_script=/usr/local/mha/master_ip_failover
master_ip_online_change_script=/usr/local/mha/master_ip_online_change
report_script=/usr/local/mha/send_report

[server1]
hostname=172.25.254.121

[server2]
hostname=172.25.1254.122
candidate_master=1  #备用主机

[server3]
hostname=172.25.254.123
no_master=1

2、masterha_check_ssh –conf=/usr/local/mha/mha.conf #检查ssh配置
这里写图片描述
3、masterha_check_repl –conf=/usr/local/mha/mha.conf #检查整个复制环境的状况
这里写图片描述
4、masterha_check_status –conf=/usr/local/mha/mha.conf #检查manager状态
5、nohup masterha_manager –conf=/usr/local/mha/mha.conf –remove_dead_master_conf –ignore_last_failover & #开启manager
这里写图片描述

测试:

server121:

killall -9 mysqld

server124

(1)手动切换,master,挂了后切换,此项需要在master挂了之后在上去手动把其转为slave

1、masterha_master_switch –master_state=stop –conf=/usr/local/mha/mha.conf –dead_master_host=172.25.254.121 –dead_master_port=3306 –new_master_host=172.25.254.122 –new_master_port=3306 -ignore_last_failover
2、change master to master_host=’172.25.254.122’,master_user=’repl’,master_password=’Westos@233’,master_auto_position=1;

(2)在线热切换,脚本会自动切换

masterha_master_switch –master_state=alive –conf=/usr/local/mha/mha.conf –new_master_host=172.25.254.122 –new_master_port=3306 –orig_master_is_new_slave –running_updates_limit=10000
这里写图片描述
这里写图片描述
这里写图片描述

上一篇:SonarQube 安装及配置方法
下一篇:Centos7安装Mysql数据库教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站