peiz先部署一个双主,双从的环境
先部署坏境(准备4个干净的虚拟机)
#防火墙和selinux
[root@localhost ~]# systemctl disable firewalld --now && setenforce 0
#主机名解析
# 修改主机名
[root@localhost ~]# hostnamectl set-hostname master1
[root@localhost ~]# hostnamectl set-hostname master2
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# hostnamectl set-hostname slave2
可以在本地解析一个ip,线程连接的时候就不用写IP了
[root@master ~]# cat /etc/hosts
192.168.19.136 master1
192.168.19.138 slave1
192.168.19.137 master2
192.168.19.139 slave2
清理环境
[root@master ~]# yum -y erase `rpm -qa | egrep "mysql|mariadb"`
[root@master ~]# rm -rf /etc/my*;rm -rf /var/lib/mysql*;rm -rf /var/log/mysql*;rm -rf /usr/bin/mysql*
[root@master ~]# [[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /var/log/mysqld.log ]] && [[ ! -f /usr/bin/mysql ]] && echo "环境已经清理完成" || echo "环境未清理"
#时间
[root@master ~]# ntpdate ntpdate ntp.aliyun.com
#固定ip
[root@master ~]# curl langlangago.org.cn/os/static_ip.sh | sh
# 配置本地源,需要先清理环境
[root@master ~]# rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/centos.repo http://www.langlangago.org.cn/repo/centos7.repo && \
yum clean all && \
yum repolist
#安装数据库
# 内网环境
[root@master ~]# yum -y install mysql-server
[root@master ~]# systemctl start mysqld
# 修改密码
[root@master ~]# mysqladmin -uroot -p"`awk '/A temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password "Qq111111."
主库配置master1:开启bin-log日志
[root@master ~]# vim /etc/my.cnf
[mysqld]
server-id=201 --几个连接的id必须是不一样的
log-bin=/data/mysql-bin -- 默认存放的位置,可以修改,但是需要先创建一个目录
log-slave-updates --写入这行就可以连接/授权多个从库
# 授权主从复制的账号
mysql> grant replication slave on *.* to 'replication'@'%' identified by 'Qq111111.';
mysql> flush privileges;
mysql> show master status;
!!!!注意master1需要给slave1授权;master1需要给master2授权;
master2需要给master1授权;master2需要给slave2授权;
从库配置(这个是slave2的配置
# 开启binlog
[root@slave ~]# mkdir -pv /data --这个就创建了一个空目录
[root@slave ~]# chown -R mysql.mysql /data --但是是需要授权的
[root@slave ~]# vim /etc/my.cnf
[mysqld]
server-id=202
log-bin=/data/mysql-bin
mysql> change master to --连接
-> master_host='master1',
-> master_user='replication', --授权的用户
-> master_password='Qq111111.', --密码
-> master_port=3306,
-> master_log_file='mysql-bin.000001', --日志名字
-> master_log_pos=154; --位置点
mysql> start slave;
mysql> show slave status\G
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 527
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 201
Master_UUID: 2e787e7c-1bd5-11ef-86cf-000c298a6e96
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
#重点关注一下行
# 第13 14 行两个YES表示主从复制正常
# 第21 22 行 表示错误码和错误信息
# 第35行 表示主从复制是否有延迟
其他三个从库也需要配置这些文件,把配置文件里面的id写了,就可以了
可以创建表测试一下
主从重复(执行了一样的命令怎么办)
在/etc/my.cnf配置文件里面加入
这个语句的意思是可以跳过这个错误
error1053:主库宕机 就没有办法了
了解一下步长,在配置文件里面改
两个主键的步长设置不一样的,就可以避免重复,错误
读写分离
假的和真的存在一个映射关系
高可用:避免单点故障,无缝衔接,mastr1宕机后,启动master2
这就叫负载均衡
Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。
部署环境
从官网下载,可以下载到/usr/local/下
jdk的名字比较长,可以设置一个环境变量
第一种
[root@mycat ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使环境变量生效
[root@mycat ~]# source /etc/profile.d/java.sh
第二种
mv jdk.... jdk
vim /etc/profile/
最后插入一句
export PATH=/usr/jdk/bin:$PATH
用java-version来测试启动jdk
部署mycat
从官网下载,可以下载到/usr/local/下
在bin 目录下启动mycat
可以在 /vim/etc/hosts/下把mycat的IP也加入
master1必须给mycat授权
mysql> grant all on *.* to 'mycat'@'%' identified by 'Qf@123456';
配置 server.xml
配置schema.xml
注意里面要修改的东西
balance 属性
1. balance="0" 只读master1
2. balance="1" m1只读 ,m2,s1,s2随机
4. balance="2" m1,m2,s1,s2随机
5. balance="3" m1只写,s1,s2随机只读,m2备用,m1宕机,m2无缝衔接m1
测试登录
mysql > mysql -uroot -p123456 -hmycat -P8066 登录成功
随便用一个s2窗口去测试
注意,schema.xml配置文件里面的库是db1
测试的几个库必须创建db1这个数据库
在里面的db1库里面创建不同的表好区分
根据balance 属性的不同值来测试