设为首页 收藏本站
查看: 362|回复: 0

[经验分享] MySQL5.6主从复制(读写分离)教程(一)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-27 09:50:19 | 显示全部楼层 |阅读模式
                      第1步:修改主数据库的配置文件/etc/my.cnf
[mysqld]

server-id=1
log-bin=mysqlmaster-bin.log

#当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘
sync_binlog=1

#缓存innodb表的索引,数据,插入数据时的缓冲, 操作系统内存的70%-80%最佳
innodb_buffer_pool_size=2G
#在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新
innodb_flush_log_at_trx_commit=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#lower_case_table_names=1
log_bin_trust_function_creators=1

第2步:修改从数据库配置文件/etc/my.cnf
[mysqld]
server-id=2
log-bin=mysqlslave-bin.log
sync_binlog=1

innodb_buffer_pool_size=2G
innodb_flush_log_at_trx_commit=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#lower_case_table_names=1
log_bin_trust_function_creators=1

第3步:在主数据库和从数据库服务器上分别执行以下命令重新启动主数据库和从数据库
[iyunv@master ~]# service mysql restart
[iyunv@slave ~]# service mysql restart

第4步:在主数据库上创建用于主从复制的账户
[iyunv@master ~]# mysql -uroot -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101' IDENTIFIED BY '111111';
Query OK, 0 rows affected (0.00 sec)

注意:以上命令中的IP地址,是从数据库服务器的IP地址。

第5步:主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标)

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

第6步:查看主数据库的状态(并记录下File字段和Position字段的值,在配置从服务器时有用到)

mysql> show master status;

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

| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysqlmaster-bin.000004 |      327 |              |                  |                  |

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

1 row in set (0.00 sec)

第7步:创建主数据库的快照文件

[iyunv@master ~]# cd /usr/bin/

# ./mysqldump -uroot -p -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >>/mnt/windows/all.sql

上面命令中的红色部分,是一个共享目录,这个目录可以同时被主数据库服务器和从数据库服务器访问到。

如果没有这样的共享目录,可以将all.sql放在其它任何目录下,然后使用scp命令复制到远程从数据库服务器的某个目录中

这条命令的执行时间根据数据量的不同,会有所不同,如果主数据库的数据量很大,可能需要很长时间,那么在这种情况下,就最好在晚上没有业务的时候进行这个操作,否则第七步中的锁表操作会对业务系统造成很大的影响

第8步:解锁主数据库的锁表操作

[iyunv@master ~]# mysql -uroot -p    (本命令在主数据库服务器上执行)

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

第9步:在从数据库服务器上导入快照文件到从数据库中

[iyunv@slave ~]# mysql -uroot -p -h127.0.0.1 -P3306 < /mnt/all.sql

第10步:在从数据库服务器上设置主数据库服务器向从数据库服务器同步

[iyunv@slave ~]# mysql -uroot -p

mysql> change master to master_host = '192.168.1.100',master_user='repl',master_password='111111',master_log_file='mysqlmaster-bin.000004',master_log_pos=327;

注意:红色部分的值,是在第6步中查出来的,这里不能弄错了

第11步:启动从数据库复制线程

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

第12步:查询从数据库的复制线程状态

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.22
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqlmaster-bin.000001
          Read_Master_Log_Pos: 920
               Relay_Log_File: lingyou2-relay-bin.000002
                Relay_Log_Pos: 887
        Relay_Master_Log_File: mysqlmaster-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: 920
              Relay_Log_Space: 1063
              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: 1
                  Master_UUID: b3825c9e-929c-11e5-898f-44a8422778a9
             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 the slave I/O thread to update it
           Master_Retry_Count: 86400
如果Slave_IO_Running和Slave_SQL_Running两项都为yes,就表示主从复制配置成功了.

下面可以开始测试配置是否成功了,首先在主数据库的test数据库中新建一张表,然后插入几条数据,然后到从数据库看看是否同步过来了。

注意:当从数据库有大量的查询时,可以暂时将从数据库的复制线程关闭掉,等查询量降下来了,再打开,这样也不会丢失数据。

                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-291901-1-1.html 上篇帖子: 忘记mysql的root密码,如何重设密码 下篇帖子: Linux下C++/C连接MySQL数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表