• ADADADADAD

    DBA成长之路---mysql主从同步,读写分离[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:58:39

    作者:文/会员上传

    简介:

    主从同步什么是主从同步: 让其他的数据库服务器自动同步正在提供服务的数据库服务器上 的数据。1 添加授权用户mysql> grant replication slave on *.* to slaveuser@"192.16

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    主从同步

    什么是主从同步: 让其他的数据库服务器自动同步正在提供服务的数据库服务器上 的数据。

    1 添加授权用户

    mysql> grant replication slave on *.* to slaveuser@"192.168.4.4" identified by '123456';

    2启用binlog日志

    [root@4-3mysql ~]# vim /etc/my.cnf

    [mysqld]

    server_id=3

    log-bin=master11

    binlog_format="mixed"

    重启数据库服务

    [root@4-3mysql ~]# systemctl restart mysqld

    4 查看日志信息

    mysql> show master status;

    master11.000001

    验证主库提供的授权用户

    [root@4-4mysql ~]# mysql -h 192.168.4.3 -u slaveuser -p123456

    修改配置文件

    [root@4-4mysql ~]# vim /etc/my.cnf

    [mysqld]

    server_id=4

    log-bin=db4

    [root@4-4mysql ~]# systemctl restart mysqld

    使用本机器的数据管理员登录,指定主库信息

    show slave status;

    mysql> change master to master_host="192.168.4.3", master_user="slaveuser",master_password="123456",master_log_file="master11.000001",master_log_pos=154;

    mysql> show slave status\G;

    Master_Log_File: master11.000001

    Read_Master_Log_Pos: 154

    Slave_IO_Running: No

    Slave_SQL_Running: No

    mysql> start slave;

    mysql> show slave status\G;

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    slave 运行2个线程

    Slave_IO:复制master主机 binlog日志文件里的sql到本机的relay-log文件里

    Slave_SQL:执行本机relay-log文件里的SQL语句,重现Master的数据操作

    从数据库目录下会多的文件

    master.info连接主服务器信息

    relay-log.info中继日志信息

    主机名-relay-bin.000000 中继日志文件

    主机名-relay-bin.index中继日志索引

    测试主从同步配置

    在主库服务器上添加访问数据的用户

    mysql> grant all on bbsdb.* to yaya@"%" identified by '123456';

    mysql> show master status;

    | master11.000001 | 446

    在客户端使用授权用户连接主库,产生的数据在从库也能查到

    [root@4-5test ~]# mysql -h 192.168.4.3 -uyaya -p123456

    MySQL [(none)]> create database bbsdb;

    这时在

    [root@4-3mysql ~]# 主服务器

    [root@4-4mysql ~]#从服务器

    上都会生成相应的表

    将从服务器变被独立服务器,关闭同步

    mysql> stop slave;

    rm -rf master.info relay-log.info

    rm -rf localhost-relay-bin*

    故障分析及排除

    原因分析

    连接不上master数据库服务器

    解决办法

    检查物理连接ping 检查授权用户

    检查是否有防火墙规则

    关闭SElinux

    或是binlog日志文件指定错误

    主从同步结构模式

    一主一从

    一主多从

    主从从

    主主结构(互为)

    主从同步常用配置参数

    写在vim /etc/my.cnf

    [mysqld]

    选项=值

    主库配置文件(对所有的从都有效)

    不允许同步的库binlog_ignore_db=库名1,库名2

    只允许同步的库binlog_do_db=库名1,库名2

    [root@4-3mysql ~]# vim /etc/my.cnf

    binlog_do_db=dba

    [root@4-3mysql ~]# systemctl restart mysqld

    从库配置文件(只对本机有效)

    只同步的库replicate_do_db=库名1,库名2

    不同步的库replicate_ignore_db=库名1,库名2

    级联复制log_slave_updates

    数据读写分离 maxscale软件 + 一主一从

    什么是读写分离: 把客户端访问数据时的查询请求select 和写请求insert 给不同的数据库服务器去处理

    写(主服务)

    读 (从服务)

    一。

    装包

    [root@4-5test ~]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm

    修改配置文件:指定数据库服务器

    [root@4-5test ~]# vim /etc/maxcale.cnf

    9 [maxscale]

    10 threads=auto开启线程 根据cpu

    18 [server1]#数据库服务器名

    19 type=server

    20 address=192.168.4.3#指定ip

    21 port=3306

    22 protocol=MySQLBackend

    23

    24 [server2]#数据库服务器名

    25 type=server

    26 address=192.168.4.4#指定ip

    27 port=3306

    28 protocol=MySQLBackend

    36 [MySQL Monitor]

    37 type=monitor

    38 module=mysqlmon

    39 servers=server1,server2#监听两台 数据库服务器

    40 user=scalemon#授权用户名

    41 passwd=123456#授权用户密码

    42 monitor_interval=10000#毫秒 每十秒监听一次

    52 #[Read-Only Service]#Read-Only 全注释

    53 #type=service

    54 #router=readconnroute

    55 #servers=server1

    56 #user=myuser

    57 #passwd=mypwd

    58 #router_options=slave

    63 [Read-Write Service]

    64 type=service

    65 router=readwritesplit

    66 servers=server1,server2#监听两台 数据库服务器

    67 user=maxscale#授权用户名

    68 passwd=123456#授权用户密码

    69 max_slave_connections=100%

    75 [MaxAdmin Service]#定义软件管理服务不用改

    76 type=service

    77 router=cli#使用方式 命令行

    85 #[Read-Only Listener]#Read-Only 全注释

    86 #type=listener

    87 #service=Read-Only Service

    88 #protocol=MySQLClient

    89 #port=4008

    91 [Read-Write Listener]

    92 type=listener

    93 service=Read-Write Service#服务名

    94 protocol=MySQLClient

    95 port=4006#读写分离监听端口号(默认)

    97 [MaxAdmin Listener]#管理服务监听

    98 type=listener

    99 service=MaxAdmin Service

    100 protocol=maxscaled

    101 socket=default

    102 port=4009#指定管理端口

    根据配置文件设置,在数据库上添加相应的授权用户

    scalemon123456监控数据库服务状态的用户(数据库服务状态和主从同步状态)

    mysql> grant replication slave,replication client on *.* to scalemon@'%' identified by '123456';

    mysql> grant select on mysql.* to maxscale@'%' identified by '123456';

    maxscale123456检查客户端连接时使用的用户名和密码在监视的数据库服务器上是否存在

    在代理主机测试

    mysql -h292.168.4.3 -uscalemon -p123456

    mysql -h292.168.4.3 -umaxscale -p123456

    mysql -h292.168.4.4 -umaxscale -p123456

    mysql -h292.168.4.4 -uscalemon -p123456

    启动服务

    [root@4-5test ~]# maxscale -f /etc/maxscale.cnf

    [root@4-5test ~]# netstat -pantu | grep maxscale

    tcp0 0 192.168.4.5:42703192.168.4.3:3306ESTABLISHED 4877/maxscale

    tcp0 0 192.168.4.5:44918192.168.4.4:3306ESTABLISHED 4877/maxscale

    tcp60 0 :::4009 :::*LISTEN 4877/maxscale

    tcp60 0 :::4006 :::*LISTEN 4877/maxscale

    二。

    测试配置

    在代理服务器本机访问管理服务

    [root@4-5test ~]# maxadmin -uadmin -pmariadb -P4009

    MaxScale> list servers

    Servers.

    ----------------------------------+------------------------------+------------+----------------------+------------------------------

    Server| Address| Port | Connections | Status

    ----------------------------------+------------------------------+------------+----------------------+------------------------------

    server1 | 192.168.4.3 | 3306 |0| Master, Running

    server2 | 192.168.4.4 | 3306 |0| Slave, Running

    ----------------------------------+------------------------------+------------+----------------------+-------------------------------

    在客户端 访问代理服务器 存储数据或查询数据

    4-3

    mysql> create database bbsdb;

    Query OK, 1 row affected (0.00 sec)

    mysql> create table bbsdb.t1(id int);

    Query OK, 0 rows affected (0.26 sec)

    MySQL [(none)]> show grants;

    +---------------------------------------------------------------------------------------+

    | Grants for yaya@%|

    +---------------------------------------------------------------------------------------+

    | GRANT USAGE ON *.* TO 'yaya'@'%' |

    | GRANT ALL PRIVILEGES ON `bbsdb`.* TO 'yaya'@'%'|

    +---------------------------------------------------------------------------------------+

    2 rows in set (0.00 sec)

    查看时显示为从服务

    MySQL [(none)]> select @@hostname;

    +---------------------+

    | @@hostname |

    +---------------------+

    | 4-4mysql |

    +---------------------+

    1 row in set (0.00 sec)

    MySQL [(none)]> insert into bbsdb.t1 values(100);

    添加后切换为主服务

    MySQL [(none)]> select @@hostname;

    +---------------------+

    | @@hostname |

    +---------------------+

    | 4-3mysql |

    +---------------------+

    1 row in set (0.00 sec)

    DBA成长之路---mysql主从同步,读写分离.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysql主从同步