一. Mysql读写分离 :Linux上配置,通过binlog进行主从同步

mysql主从复制,读写分离配置

  1.主数据库:
  
   a.在主数据库里创建一个同步账号
     #每个从数据库会使用一个MySQL账号来连接主数据库,所以我们要在主数据库里创建一个账号,并且该账号要授予 REPLICATION SLAVE 权限,你可以为每个从数据库分别创建账号,当然也可以用同一个!)
     #下面来创建一个账号,账号名:repl,密码:123456,只允许192.168.1.的IP段登录,如下:
     CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY '123456';
     GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
     #如果开发防火墙,可能要配置下端口,如下:
     firewall-cmd --zone=public --add-port=3306/tcp --permanent
     firewall-cmd --reload
     
   b.配置主数据库
    #需要关闭MySQL和编辑my.cnf或者my.ini文件,在 [mysqld] 节点下添加或修改配置。
    vim my.cnf
    #添加或修改配置以下内容:
    log-bin=mysql-bin # 启用二进制日志,日志文件名以“mysql-bin”作为前缀
    server-id=1 # 如果不配置server-id或者配置值为0,那么主服务器将拒绝所有从服务器的连接。
    binlog-do-db=mstest # mstest是要同步的数据库名称
    innodb_flush_log_at_trx_commit=1 
    sync_binlog=1
    binlog-ignore-db=mysql # 要忽略的数据库
    #重启mysql
    mysql> show master status;
    #执行上面命令记录好File和Position,后面要用
 
   2.从数据库配置:
   
    a.vim my.cnf
      #添加或修改配置以下内容:
      server-id=2 # 如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
      replicate-do-db = mstest #在master端不指定binlog-do-db,在slave端用replication-do-db来过滤
      replicate-ignore-db = mysql #忽略的库
      relay-log=mysqld-relay-bin
      
    b.配置连接主服务器的信息
      mysql> stop slave;
      mysql> CHANGE MASTER TO
      -> MASTER_HOST='192.168.1.233',
      -> MASTER_USER='repl',
      -> MASTER_PASSWORD='123456',
      -> MASTER_LOG_FILE='mysql-bin.000002', #配置主数据库show master status的File
      -> MASTER_LOG_POS=313; #配置主数据库show master status的Position
      mysql> start slave;
      
    c.查看从服务器状态
    mysql> show slave status \G;
    如果slave_io_running和slave_sql_running都为yes,那么表明可以成功同步了     
   
   3.测试数据同步
    测试,Navicat连接主服务器 ,添加了表 
    然后再连接上 从服务器mysql,发现也自己同步创建了该表即成功

    
备注:以上是以mysql5.5为例,而 MariaDB可能有点不同,
      那些server—id的配置需要在 /etc/my.cnf.d/server.cnf 或者目录下有名为 Data的名为 my.ini 的文本文件 增加相关配置;
    
navicat 连接虚拟机mysql连不上问题:

1.登陆mysql
    #mysql -u root -p
2.修改mysql库的user表,将host项,从localhost改为%。%这里表示的是允许任意host访问,如果只允许某一个ip访问,
  则可改为相应的ip,比如可以将localhost改为192.168.1.123,这表示只允许局域网的192.168.1.123这个ip远程访问mysql。
  更改数据库用户权限grant all privileges on portal.* to root@zq27 identified by 'root';
    mysql> use mysql; 
    mysql> grant all privileges on portal.* to root@zq27 identified by 'root';
    mysql> update user set host = '%' where user = 'root'; 
    #若出现ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 不予理会,继续即可
    mysql> flush privileges;

猜你喜欢

转载自blog.csdn.net/weixin_39494923/article/details/84555643