MySQL实战(一):一主一从配置

环境准备

一主一从:

主库IP:192.168.192.133

从库IP:192.168.192.134

配置

主库操作:

  1. 修改my.cnf的配置文件

    设置server-id值,并开启bin_log日志,重启mysql。

    [root@localhost ~]# vim /etc/my.cnf
    log_bin=mysql
    server-id=101  #必须是集群中的唯一id
    
    [root@localhost ~]# systemctl restart mysqld
    
  2. 建立同步账号

    [root@localhost ~]# mysql -uroot -pABCabc123!
    mysql> grant replication slave on *.* to 'repl'@192.168.192.134 identified by 'Aa123456.';
    

    grant命令:

    • replication slave on,在主服务器新建一个用户赋予“replication slave on”的权限。你不需要再赋予其它的权限。

    • on:表示这些权限对哪些数据库和表生效
      格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user

    • to:将权限授予哪个用户。
      格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”repl”@”192.168.192.133”,表示repl这个用户只能在192.168.192.133登录。
      一般不用root帐号,“%”表示该段所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.192.133,加强安全。

    • identified by:指定用户的登录密码

  3. 查看主库状态,记住file值和position值。

    即当前日志文件名和二进制日志偏移量。

    mysql> show master status;
    +--------------+----------+--------------+------------------+-------------------+
    | File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +--------------+----------+--------------+------------------+-------------------+
    | mysql.000004 |     904 |              |                  |                   |
    +--------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    
  4. 备份数据库数据

    [root@localhost ~]# mysqldump -uroot -pABCabc123! -A -B |gzip > /date/mysql_alldb_$(date +%F).sql.gz;
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    
  5. 将主库备份的数据上传到从库

    [root@localhost ~]# scp /date/mysql_alldb_2019-04-13.sql.gz 192.168.192.134:/date/mysql/
    root@192.168.192.134's password:
    mysql_alldb_2019-04-13.sql.gz                         100%  205KB  14.7MB/s   00:00
    

第四步和第五步主要是为了让从库获取未与主库连接之前主库的数据。

从库操作:

  1. 修改my.cnf的配置文件

    设置server-id值,并开启bin_log日志,重启mysql。

    [root@localhost ~]# vim /etc/my.cnf
    [mysqld]
    server_id=102
     
    [root@localhost ~]# systemctl  restart mysqld
    
  2. 还原数据,通过从 主库传过来的备份数据来还原。

    [root@localhost ~]# cd /date/mysql/
    
    [root@localhost mysql]# ls
    mysql_alldb_2019-04-13.sql.gz
    
    [root@localhost mysql]# gzip -d mysql_alldb_2019-04-13.sql.gz
    
    [root@localhost mysql]# ls
    mysql_alldb_2019-04-13.sql
    
    [root@localhost ~]# mysql -urepl -pAa123456. < mysql_alldb_2019-04-13.sql
     
     #检查还原
     [root@localhost ~]# mysql -urepl -pAa123456. -e   'show databases;'
    
  3. 设定从库同步主库

    mysql> change master to
        -> master_host='192.168.192.133',
        -> master_port=3306,
        -> master_user='repl',
        -> master_password='Aa123456.',
        -> master_log_file='mysql.000004',
        -> master_log_pos=904;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
  4. 启动从库同步开关

    mysql> start slave;
    Query OK, 0 rows affected (0.02 sec)
    
    #检查状态
    mysql> show slave status\G;
    

    在这里插入图片描述

出错:

接下来就可以测试了,在测试的时候需要注意,从库的数据要与主库数据一致,如果你只更改了从库的数据,这时候你再去更改主库的数据,从库不会发生变化。

查看从库的状态,会出现下面的情况:
在这里插入图片描述
解决方法:

  • 解决方法1:

    mysql> stop slave;
    mysql> set global sql_slave_skip_counter=1;
    

    这个解决的是因为事务的原因导致的sql进程停止。

  • 解决办法2:

    mysql> stop slave;
    mysql> set global sql_slave_skip_counter=1;
    
    #在主库上查看:
       mysql> show master status;
       +--------------+----------+--------------+------------------+-------------------+
       | File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
       +--------------+----------+--------------+------------------+-------------------+
       | mysql.000006 |     1649 |              |                  |                   |
       +--------------+----------+--------------+------------------+-------------------+
       1 row in set (0.00 sec)
       
    #在从库上重新手动同步:
         mysql> change master to
           -> master_host='192.168.192.133',
           -> master_port=3306,
           -> master_user='repl',
           -> master_password='Aa123456.',
           -> master_log_file='mysql.000006',
           -> master_log_pos=1649;
       Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值