mysql主从(master-slave)复制安装配置
Posted by 机器人 on 6th 一月 2010 in mysql
一. 环境准备
准备两台服务器,IP分别为
192.168.1.119 (主数据库服务器)
192.168.1.120 (从数据库服务器)
分别装好mysql数据库服务器
二. 安装配置
1. 在主数据库服务器上设置一个复制使用的账户,并授予replication slave权限,这里创建一个复制用户rep1,可以从IP为192.168.1.120的主机进行连接.
mysql > grant replication slave on *.* to 'rep'@'192.168.1.120' identified by '123';
2. 修改主数据库服务器的配置文件my.cnf,开启binlog,并设置server-id的值。
[mysqld]
server-id=1
log-bin=/var/lib/mysql/mysql-bin.log
数据库重启后生效
3. 在主服务器上,设置读锁有效,这个操作是为了确保没有数据库操作,以便获得一个一致性的快照。
mysql > flush tables with read lock;
4. 然后得到主服务器上当前的二进制日志名的偏移量值。这个操作的目的是为了在从数据库启动以后,从这个点开始进行数据的恢复。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 2122 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
5. 建立测试数据库test1
mysql> create database test1;
Query OK, 1 row affected (0.01 sec)
6. 备份一份数据库文件,将其恢复到从服务器上,可以通过mysqldump或者直接拷贝文件的方式。这里采用直接copy文件的方式。
[~@master]# cd /var/lib/mysql
[~@master]# tar cvf test1.tar test1
test1/
test1/db.opt
[~@master]# scp test1.tar root@192.168.1.120:/var/lib/mysql/
...
[~@slave]# tar xvf test1.tar
7. 备份完毕后,主数据库恢复被写操作
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
8. 修改从数据库的配置文件my.cnf,添加server-id参数,注意这里的server-id参数必须唯一,不能和主数据库的配置相同.复制使用的用户、主数据库服务器的IP、端口以及连接丢失时,重试的时间
[mysqld]
server-id=2
master-host=192.168.1.119
master-user=rep1
master-password=123456
master-connect-retry=60
9. 在从服务器上,使用–skip-slave-start 选项启动从数据库,这样就不会立即启动从数据库上的复制进程,方便对数据库的服务进程进行进一步的配置
[~@slave]# /usr/bin/mysqld_safe --skip-slave-start &
[~@slave]# Starting mysqld daemon with databases from /var/lib/mysql
10. 指定开始执行复制的日志文件和位置
mysql> change master to
-> master_log_file='mysql-bin.000001',
-> master_log_pos=2207;
Query OK, 0 rows affected (0.01 sec)
这里的log_file和log_pos是通过主服务器中执行
mysql > show master stauts;
得到
11. 在从服务器上,启动slave进程
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
12. 这时在slave上执行show processlist 命令将显示类似如下进程
mysql> show processlist \G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 3
User: system user
Host:
db: NULL
Command: Connect
Time: 29
State: Waiting for master to send event
Info: NULL
*************************** 3. row ***************************
Id: 4
User: system user
Host:
db: NULL
Command: Connect
Time: 29
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
3 rows in set (0.01 sec)
这表明slave已经连接上master,并开始接受并执行日志.
13.测试复制服务器的正确性,在主数据库上执行一个更新操作,观察是否在从数据库上同步.
mysql> use test1;
Database changed
mysql> create table rep(id int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into rep values(1),(2),(3),(4),(5);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
15. 在从数据库上检查新表是否被创建,数据是否被同步.
mysql> use test1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| rep |
+-----------------+
1 row in set (0.00 sec)
mysql> select * from rep;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
5 rows in set (0.00 sec)
可以看到数据可以正确同步到从数据库上,复制服务配置成功完成.
三 复制启动选项
这些选项可以在启动时加入,也可以直接写在my.cnf里
1. log-slave-updates
这个参数用来配置从服务器上的更新操作是否写进进制日志,默认不打开,但是,如果这个从服务器同时也要作为其它服务器的主服务器时,就需要启动.
这个参数需要和log-bin一起使用.
2. master-connect-retry
这个参数用来设置在和主服务器连接丢失的时候,重度的时间间隔.
3. read-only
这个参数用来设置从服务器只能接受超级用户的更新操作,从而限制应用程序错误的对从服务器的更新操作.
4. 指定复制的数据库或者表
可以使用replicate-do-db、replicate-do-table、replicate-ignore-db、replicate- ignore-table或replicate-wild-do-table来指定从主数据库复制到从从数据库的数据库或者表。
四 日常管理维护
1. 查看从服务器状态
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.119
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 2400
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 428
Relay_Master_Log_File: mysql-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: 2400
Relay_Log_Space: 428
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
1 row in set (0.00 sec)
ERROR:
No query specified
主要关心”Slave_IO_Running”和“Slave_SQL_Running”这两个进程的状态是否为”yes”。只要其中一个进程状态为no,则表示复制进程停止,错误原因可以从“Last_Errno”字段中的值看到。
2. 主从服务器手工同步
从服务器由于各种原因导致更新速度较慢,从而是主从服务器之间的数据差距越来越大,最终对某些应用产生影响,这种情况下,就需要定期地进行主从服务器的数据同步,使得主从服务器差距能够减到最小。常用方法是:在负载较低的时候暂时阻塞主数据库的更新,强制主从数据库更新同步。
阻塞更新
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 2400 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在从服务器上,执行下面语句,其中master_pos_wait()函数的参数是前面步骤中得到的复制坐标值。
mysql> select master_pos_wait('mysql-bin.000001','2400');
+--------------------------------------------+
| master_pos_wait('mysql-bin.000001','2400') |
+--------------------------------------------+
| 0 |
+--------------------------------------------+
1 row in set (0.00 sec)
这个语句会阻塞直到从服务器达到指定的日志文件和偏移量后,返回0,如果返回-1。
在主服务器上,执行下面语句允许主服务器重新开始处理更新
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
3. log event entry exceeded max_allowed_packet的处理
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.01 sec)
mysql> set @@global.max_allowed_packet=16777216
同时在my.cnf里设置max_allowed_packet=16M,保证下次数据库重新启动后参数继续有效。
好了,暂时总结这么多.
分享到:
相关推荐
mysql主从服务器配置 一步步实现mysql的主从配置: 主服务器:192.168.1.19 从服务器:192.168.1.20 需要提供两台虚拟机作为测试。
Linux下MySQL主从服务器的搭建详细实例完整版,欢迎大家来踩 Linux下MySQL主从服务器的搭建详细实例完整版,欢迎大家来踩 Linux下MySQL主从服务器的搭建详细实例完整版,欢迎大家来踩
MYSQL高级特性 81<br>4.1 集合函数 82<br>4.1.1 行列计数 82<br>4.1.2统计字段值的数目 82<br>4.1.3 计算字段的平均值 83<br>4.1.4 计算字段值的和 84<br>4.1.5 计算字段值的极值 84<br>4.1.6 总结 86<br>4.2 操作...
mysql主从服务器配置,1.mysql主从服务器介绍: MySQL主从又叫做Replication、AB复制。 简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。 MySQL主从是基于binlog的,主...
MYSQL高级特性 81<br>4.1 集合函数 82<br>4.1.1 行列计数 82<br>4.1.2统计字段值的数目 82<br>4.1.3 计算字段的平均值 83<br>4.1.4 计算字段值的和 84<br>4.1.5 计算字段值的极值 84<br>4.1.6 总结 86<br>4.2 操作...
配置mysql5.5主从服务器(转)
mysql linix 主备同步 写数据库 读数据库
-> 首先配置master服务器 -> 下载MySQL -> 修改配置文件 启用二进制日志、设置id、添加复制权限用户 -> 配置环境变量 -> 安装服务 -> 配置Slave服务器 -> 连接到master
自己手动配置Mysql主从服务器的步骤及方法的记录笔记。
linux下mysql双机互备配置。实际操作的结果
mysql主从同步配置详解、一台服务器两个mysql,本地安装两个mysql实现主从同步
Windows,MySQL5.5,主从配置,主或从挂掉问题处理
编写的脚本用来监控mysql主从模式 环境: Centos5.6 mysql只做同步指定库,没有同步mysql库用户数据 登陆从服务器mysql,添加验证的用户 grant replication client on *.* to 'nagios'@localhost identified ...
1.由于设置了slave的配置信息,mysql在数据库data目录下生成master.info,所以如有要修改相关slave的配置要先删除该文件,否则修改... 您可能感兴趣的文章:mysql 主从服务器的简单配置mysql主从服务器同步心得体会配置My
1、在主控服务器上执行以下命令,为从服务器创建一...GRANT REPLICATION SLAVE ON *.* TO replic@192.168.1.143 IDENTIFIED BY '123456'; 2、修改主从服务器配置文件 主my.cnf内容: log-bin=mysqlmaster server-id=1
mysql5.5 主从配置,可以使得mysql服务器配置更加简单,熟练
Mysql主从同步备份策略 五月 18th, 2009 at 17:30 - 3,803 views 环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # ...
一个Mysql主从配置的操作文档,Mysql版本要求大于等于5.1.7
MySQL8.0 主从复制配置过程介绍,手把手教你如何配置主从服务器
mysql读写分离的配置,配置django配置,数据库配置,linux配置