MySQL主从复制和读写分离、

4 篇文章 0 订阅
  • MySQL主从复制和读写分离、

1.

1)MySQL主从复制作用

避免单节点故障

保证数据库的可靠性

2)MySQL可靠性解决方案

主从复制

主主复制

Mysql MHA

Mysql MM

Mysql 双机热备

2.MySQL读写分离

1)MySQL读写分离的作用

加快用户访问速度

增加访问并发量

2)读写分离方式

Mysql proxy: 需要二次开发,使用复杂

Amoeba:java语言编写,配置简单实用方便

3.MySQL主从的原理和复制的类型

1)MySQL主从复制的原理

      开启二进制日志功能

      从MySQL服务器监听主MySQL复制二进制日志变化复制到本地

      从MySQL读取主MySQL日志应用主MySQL日志从而保证数据库状态的一致性

2)MySQL的复制类型

      基于语句的复制

      基于行的复制

      混合的复制类型

  • 配置主从复制
  1. 配置NTP服务器

```c

vim /etc/ntp.conf

        18 restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap   //允许哪个网站来同步时间

        19 server 127.127.1.0                 //服务器是自己

        20 fudge 127.127.1.0 stratum 8       //时区

```

  1. 启动服务并设置开机自启

```c

[root@centos01 ~]# systemctl start ntpd

[root@centos01 ~]# systemctl enable ntpd

Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.

```

  1. 从服务器同步时间

[root@centos02 ~]# ntpdate 192.168.100.10

 [root@centos03 ~]# ntpdate 192.168.100.10

 [root@centos04 ~]# ntpdate 192.168.100.10

## 进行安装编译MySQL

### 主从节点安装MySQL

```c

[root@centos01 ~]# mount /dev/sr0 /mnt

[root@centos01 ~]# yum -y install ncurses-devel cmake

[root@centos01 ~]# mount /dev/sr1 /mnt

 [root@centos01 ~]# tar zxf mysql-5.5.22.tar.gz -C /usr/src/

 [root@centos01 ~]# cd /usr/src/mysql-5.5.22/

 [root@centos01 mysql-5.5.22]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc

 [root@centos01 mysql-5.5.22]# make && make install

```

## 主从节点优化调整

```c

[root@centos01 mysql-5.5.22]# cp support-files/my-medium.cnf /etc/my.cnf

[root@centos01 mysql-5.5.22]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@centos01 ~]# chmod +x /etc/rc.d/init.d/mysqld

[root@centos01 ~]# chkconfig --add mysqld

[root@centos01 ~]# chkconfig --level 35 mysqld on

[root@centos01 ~]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

[root@centos01 ~]# source /etc/profile

```

## 初始化数据库

```c

[root@centos01 ~]# groupadd mysql

[root@centos01 ~]# useradd -M -s /sbin/nologin mysql -g mysql

[root@centos01 ~]# chown -R mysql:mysql /usr/local/mysql/

[root@centos01 ~]# /usr/local/mysql/scripts/mysql_install_db  --user=mysql --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data/

```

## 启动MySQL

```c

[root@centos01 ~]# systemctl restart mysqld

[root@centos01 ~]# mysqladmin -u root password 'pwd@123' 

```

### 修改MySQL主配置文件(centos01)

```c

  1)修改配置文件

    [root@centos01 ~]# vim /etc/my.cnf

        :%g/^$/d                               //删除空行

        :%g/^#/d                               //删除注释行

           16 log-bin=mysql-bin             //开启二进制日志

18 server-id       = 10                     //设置mysql服务器ID

  19 log-slave-update=true                       //开启日志复制功能

  2)重新启动mysql服务加载配置文件

      [root@centos01 ~]# systemctl restart mysqld

```

### 修改从mysql从配置文件(centos02、centos03)

```c

[root@centos02 03 ~]# vim /etc/my.cnf

            :%/^$/d                              //删除空行

            :%/^#/d                              //删除注释行

            16 log-bin=mysql-bin

            18 server-id       = 20

            19 relay-log=relay-log-bin          

            20 relay-log-index=slave-relay-bin.index

```

记得重启服务

```c

[root@centos02 03 ~]# systemctl restart mysqld

```

## 配置主从复制

  ### 配置主服务器centos01

```c

1)创建主从复制账户

            [root@centos01 ~]# mysql -uroot -ppwd@123

            mysql> grant replication slave on *.* to 'slave'@'192.168.100.%' identified by 'pwd@123';

      2)查看指定用户权限信息

          mysql> select user,host from mysql.user where user='slave';

      3)查看主mysql状态

            mysql> show master status;

```

### 配置从服务器centos02

      1)配置从mysql数据库复制账户

          [root@centos02 ~]# mysql -uroot -ppwd@123

            mysql> change master to master_host='192.168.100.10',master_user='slave',master_password='pwd@123',master_log_file='mysql-bin.000002',master_log_pos=257;

      2)启动从数据库复制进程

            mysql> start slave;

      3)查看从mysql复制状态

            mysql> show slave status\G;

  ### 配置从服务器centos03

      1)配置从mysql数据库复制账户

          [root@centos03 ~]# mysql -uroot -ppwd@123

            mysql> change master to master_host='192.168.100.10',master_user='slave',master_password='pwd@123',master_log_file='mysql-bin.000002',master_log_pos=257;

      2)启动从数据库复制进程

            mysql> start slave;

      3)查看从mysql复制状态

            mysql> show slave status\G;

## 验证主从复制效果    

1)在主服务器(centos01)上创建数据库

  [root@centos01 ~]# mysql -uroot -ppwd@123

      mysql> show databases;

      mysql> create db_test;

      mysql> show databases;      

2)在从服务器(centos02,centos03)上分别查看数据库,如果显示数据库相同,则主从复制成功,否则失败

 [root@centos02 ~]# mysql -uroot -ppwd@123

       mysql> show databases;

 [root@centos03 ~]# mysql -uroot -ppwd@123

       mysql> show databases;

# MySQL读写分离

## 修改映射文件(centos01,centos02,centos03,centos04,centos05)

      vim /etc/hosts

      192.168.100.10 master

      192.168.100.20 slave01

      192.168.100.30 slave02

      192.168.100.40 amoeba    

##  安装JDK和amoeba(centos04)

```c

      1)解压JDK

          [root@centos04 ~]# mount /dev/sr1 /mnt

            [root@centos04 ~]# cp /mnt/jdk-6u14-linux-x64.bin ./

            [root@centos04 ~]# ./jdk-6u14-linux-x64.bin

      2)移动JDK位置

            [root@centos04 ~]# mv jdk1.6.0_14/ /usr/local/java

      3)创建amoeba配置文件并解压

            [root@centos04 ~]# mkdir /usr/local/amoeba

            [root@centos04 ~]# tar zxf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

      4)配置环境变量

            [root@centos04 ~]# vim /etc/profile.d/java.sh

            export JAVA_HOME=/usr/local/java

            export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

            export PATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/bin:$PATH:$HOME/bin/

            export AMOEBA=/usr/local/amoeba

            export PATH=$PATH:$AMOEBA/bin

            [root@centos04 ~]# source /etc/profile.d/java.sh

      5)查看jdk版本

            [root@centos04 ~]# java –version

```

3、配置读写分离
    1)创建amoeba访问mysql数据库读写分离帐户(centos01)
        [root@centos01 ~]# mysql -uroot -ppwd@123
        mysql> grant all on *.* to 'write'@'192.168.100.%' identified by 'pwd@123';
    2)修改amoeba配置文件设置登录amoeba账户(centos04)
        [root@centos04 ~]# cp /usr/local/amoeba/conf/{amoeba.xml,amoeba_xml.bak}
        [root@centos04 ~]# vim /usr/local/amoeba/conf/amoeba.xml
        10                         <property name="port">8066</property>                        //访问amoeba端口
        27                                         <property name="user">amoeba</property>        //登录amoeba账户
        28                                         <property name="password">pwd@123</property> //登录amoeba密码
        111                 <property name="defaultPool">master</property>
        113                 <property name="writePool">master</property>                          //主mysql
        114                 <property name="readPool">slaves</property>                              //读取组名字slaves
        115                 <property name="needParse">true</property>
    3)修改配置文件添加读写节点(centos04)
        [root@centos04 ~]# cp /usr/local/amoeba/conf/{dbServers.xml,dbServers_xml.bak}    
        [root@centos04 ~]# vim /usr/local/amoeba/conf/dbServers.xml
        19                         <property name="port">3306</property>                //amoeba访问mysql端口
        22                         <property name="user">write</property>                //amoeba访问mysql账户
        23                         <property name="password">pwd@123</property>            //amoeba访问mysql密码
        38         <dbServer name="master"  parent="abstractServer">
        39                 <factoryConfig>
        40                         <property name="ipAddress">192.168.100.10</property>
        41                 </factoryConfig>
        42         </dbServer>
        43         
        44         <dbServer name="slave01"  parent="abstractServer">
        45                 <factoryConfig>
        46                         <property name="ipAddress">192.168.100.20</property>
        47                 </factoryConfig>
        48         </dbServer>
        49         
        50         <dbServer name="slave02"  parent="abstractServer">
        51                 <factoryConfig>
        52                         <property name="ipAddress">192.168.100.30</property>
        53                 </factoryConfig>
        54         </dbServer>  
        55         <dbServer name="slaves" virtual="true">
        56                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
        57                         <property name="loadbalance">1</property>
        58                         <property name="poolNames">slave01,slave02</property>
        59                 </poolConfig>
        60         </dbServer>
    4)启动amoeba服务 
        [root@centos04 ~]# /usr/local/amoeba/bin/amoeba start&     
4、配置mysql客户端 
    1)安装mysql客户端 
        [root@centos05 ~]# mount /dev/sr0 /mnt
        [root@centos05 ~]# yum -y install mariadb
    2)登录amoeba 
        [root@centos05 ~]# mysql -h 192.168.100.40 -P8066 -uamoeba -ppwd@123
        MySQL [(none)]> create database xsh;
        MySQL [(none)]> create table xsh.student (姓名 char(5),性别 char(3),电话号码 char(11));
        MySQL [(none)]> insert into xsh.student values ('bob','男','12345678901');     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值