设为首页 收藏本站
查看: 626|回复: 1

[经验分享] MySQL主从复制详细部署过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-10-30 09:15:27 | 显示全部楼层 |阅读模式
环境介绍:

采用多实例进行主从复制测试,多实例方法请参考网上其它文档,其实多实例和双服务器对于测试环境来说是一样的。

当前采用3306端口进程为Master,3307端口进程为Slave.

Mysql版本:

mysql> select version();

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

| version() |

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

| 5.1.68 |

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

1 row in set (0.04 sec)

配置过程如下:

1.主库开启bin-log功能,配置server-id

该参数在my.cnf中添加

vi /data3/3306/my.cnf

……

[mysqld]

server-id = 1

log-bin = /data3/3306/mysql-bin

……

可查看命令show variables like 'log_bin'; show variableslike 'server_id';

mysql> show variables like 'log_bin';

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

| Variable_name | Value |

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

| log_bin | ON |

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

1 row in set (0.00 sec)

mysql> show variables like 'server_id';

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

| Variable_name | Value |

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

| server_id | 1 |

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

1 row in set (0.00 sec)


2.在主库上创建复制授权用户

mysql>grant replication slave on *.* to rep@'10.0.0.%' identified by '123456';

QueryOK, 0 rows affected (0.19 sec)

对所有库所有表,授权rep用户只有复制的权限。

3.对数据库锁表只读

mysql>flush tables with read lock;

QueryOK, 0 rows affected (0.07 sec)

该命令退出当前连接数据库后,锁表功能就失效。

4.记录log-bin文件名和位置

mysql>show master status;

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

|File | Position |Binlog_Do_DB | Binlog_Ignore_DB |

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

|mysql-bin.000002 | 340 | | |

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

1row in set (0.00 sec)

该命令需要在锁表后执行,生产环境中每时都有数据写入,只有确保锁表后show master status才准确。

5.导出全部数据

由于退出当前mysql登陆窗口,锁表功能就失效,需克隆一个会话进行全备。

[iyunv@Web01_n~]# mysqldump -B -A --events -S/data3/3306/mysql.sock|gzip >/tmp/3306mysql.sql.gz

[iyunv@Web01_n~]# ll /tmp/3306mysql.sql.gz

-rw-r--r--1 root root 136573 10-29 16:14 /tmp/3306mysql.sql.gz

导完库查看主库状态,确定bin-log信息没有变化

mysql>show master status;

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

|File | Position |Binlog_Do_DB | Binlog_Ignore_DB |

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

|mysql-bin.000002 | 340 | | |

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

1row in set (0.00 sec)

注:由于我的数据库并没有设置用户名和密码,所以未指定-u -p参数。

6.解除锁表

退出锁表登陆窗口或使用命令 unlock tables;

mysql>flush tables with read lock;

QueryOK, 0 rows affected (0.00 sec)

mysql>

mysql>quit

Bye

mysql>unlock tables;

QueryOK, 0 rows affected (0.00 sec)

7.从库配置文件配置

[iyunv@Web01_n3307]# netstat -plnt |grep 3307

tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 11466/mysqld

[iyunv@Web01_n3307]# kill 11466

[iyunv@Web01_n3307]# netstat -plnt |grep 3307

[iyunv@Web01_n3307]# vi /data3/3307/my.cnf

……

[mysqld]

server-id= 2 #如果ID和master一致,slave的IO线程会起不来

log-bin= /data3/3307/mysql-bin #从库上开启binlog日志功能,一般用于其它从库从这进行复制,也可不加这条命令

……

[iyunv@Web01_n3307]# mysqld_safe --defaults-file=/data3/3307/my.cnf &

[4]11572

[iyunv@Web01_n3307]# 131029 16:56:10 mysqld_safe Logging to'/data3/3307/mysql_oldboy3307.err'.

13102916:56:10 mysqld_safe Starting mysqld daemon with databases from/data3/3307/data


[iyunv@Web01_n3307]# netstat -plnt|grep 3307

tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 11751/mysqld

杀掉原先进程,修改配置并重启。重启参数使用mysqld_safe,&是后台执行。

8.导入全部数据至从库

解压备份的数据

[iyunv@Web01_n~]# ll /tmp/

-rw-r--r--1 root root 136573 10-29 16:14 3306mysql.sql.gz

[iyunv@Web01_n~]# gzip -d /tmp/3306mysql.sql.gz #解压gz文件,并删除压缩包

[iyunv@Web01_n~]# ll /tmp/3306mysql.sql

-rw-r--r--1 root root 502068 10-29 16:14 /tmp/3306mysql.sql

导入数据

[iyunv@Web01_n~]# mysql -S /data3/3307/mysql.sock </tmp/3306mysql.sql


9.从库设置change master语句

binlog位置状态为主库show master status查看的位置状态

CHANGEMASTER TO

MASTER_HOST='10.0.0.237',

MASTER_PORT=3306,

MASTER_USER='rep',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin.000002',

MASTER_LOG_POS=340;


演示效果

mysql>CHANGE MASTER TO

-> MASTER_HOST='10.0.0.237',

-> MASTER_PORT=3306,

-> MASTER_USER='rep',

-> MASTER_PASSWORD='123456',

-> MASTER_LOG_FILE='mysql-bin.000002',

-> MASTER_LOG_POS=340;

QueryOK, 0 rows affected (0.01 sec)

配置master的IP,端口,用户,密码,binlog文件名与位置。注意此处的MASTER_LOG_FILE与MASTER_LOG_POS的值为上面主库show master status得到


10.从库开启slave开关

mysql>start slave;

QueryOK, 0 rows affected (0.00 sec)

开启从库的IO线程和SQL线程。也可单独开启,START SLAVE IO_THREAD;START SLAVE SQL_THREAD;

11.从库查看同步状态

mysql>show slave status\G

***************************1. row ***************************

Slave_IO_State: Waiting formaster to send event

Master_Host: 10.0.0.237

Master_User: rep

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 340

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes #两个YES代表主从同步线程正常

Replicate_Do_DB:

Replicate_Ignore_DB: mysql

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: 340

Relay_Log_Space: 400

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:

1row in set (0.00 sec)

命令最后使用;是表格形式,使用\G是行形式。有些内容使用\G更直观。

12.主从同步测试

在master上创建数据库及表,看是否同步。

[iyunv@Web01_n3307]# mysql -S /data3/3306/mysql.sock -e "create database yy1028;"

[iyunv@Web01_n3307]# mysql -S /data3/3307/mysql.sock -e "show databases;"

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

|Database |

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

|information_schema |

|mysql |

|test |

|test1 |

|yy1028 |

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


主从同步测试成功!



其它:

1.在主库上执行show master status;为空问题

因为没有开启bin-log功能,或没有生效。在数据库里查看 show variables like '%log_bin%';看log-bin是否有on。

2. 控制binlog文件过期时间,在my.cnf中加入expire_logs_days = 7 参数,则7天后该binlog日志就自动删除。





运维网声明 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-10097-1-1.html 上篇帖子: MySQL数据库锁介绍 下篇帖子: mysql中varchar的最大长度

尚未签到

发表于 2013-12-22 17:09:46 | 显示全部楼层
◆◇丶曾经在幽幽暗暗反反复复中追问,才知道平平淡淡从从容容是最真。╮

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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