mysql 5.5 配置异步复制

部分参考来自网络。

一、异步复制基本原理:

从MySQL3.23.15以后,MySQL支持单向的异步复制。也就是说,1台MySQL服务器充当Master(主库),1台或多台MySQL服务器充当Slaves(从库),数据从Master向Slaves进行异步复制。注意,这种复制是异步的,有别于MySQL的同步复制实现(这种实现称做MySQL集群,MySQL Cluster)。

当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Binlog),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。

有几个关键性的地方需要注意:

- 主库必须启用Bin log,主库和从库必须有唯一的Server Id
- 从库必须清楚了解从主库的哪一个Bin log文件的哪一个偏移位置起开始复制
- 从库可以从主库只复制指定的数据库,或者数据库的某些数据表
- 主库和从库的数据库名称可以不一样,不过还是推荐使用一样的名称
- 主库和从库的MySQL版本需保持一致

二、安装:

1、下载相关压缩包,从5.5开始mysql开始使用cmake编译安装。

2、下载cmake压缩包,编译安装。

# tar zxvfcmake-2.8.12.2.tar.gz

# cdcmake-2.8.12.2

#.configure

# make&& make install

3、安装mysql,开始时下载的是如下选项,用cmake编译时出现异常:

CMake Error: The source directory “*” does not appear to contain CMakeList


重新下载源码包:


4、创建相关安装目录

Mysql安装目录:

mkdir -p/usr/local/mysql/

数据存放目录

mkdir -p/data/mysql/

5、创建用户和用户组与赋予数据存放目录权限

groupadd mysql

useradd -g mysqlmysql

chownmysql.mysql -R /data/mysql/

6、编译。使用编译配置信息如下(注意utf8_general_ci不要写错。网上有些错的):

 cmake .-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/data/mysql \

-DMYSQL_UNIX_ADDR=/data/mysql/mysqld.sock \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DENABLED_LOCAL_INFILE=1\-DMYSQL_TCP_PORT=3306 \

-DEXTRA_CHARSETS=all\-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \

-DMYSQL_USER=mysql \-DWITH_DEBUG=0

7、安装:make && make install

8、复制配置文件:

cp support-files/my-large.cnf /etc/my.cnf

cp support-files/mysql.server/etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

9、初始化数据库:

cd /usr/local/mysql

bash scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/data/mysql/

注意上面命令的空格和拼写。


10、启动mysql服务:

/etc/init.d/mysqldstatus (查看状态)

/etc/init.d/mysqldstart (启动服务)

(设置root密码)

/usr/local/mysql/bin/mysqladmin-u root password '123456'

11、             配置自启动和环境变量:

echo"/usr/local/mysql/bin/mysqld_safe --user=mysql &">>/etc/rc.local

echo"export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile

source/etc/profile

 

 

 

12、             问题:[root@localhost mysql]# service mysql start
Starting MySQL.. ERROR! The server quit without updating PID file(/var/lib/mysql/localhost.localdomain.pid).

类似问题,大部分的答案都是:
1. 注释/etc/my.cnf里的skip-federated注释掉即#skip-federated;
2. my.cnf文件配置过高,重新定义其中的参数(根据服务器情况定义);
3. 杀掉mysql_safe和mysqld进程,然后再重启;
4. 当前日志文件过大,超出了my.cnf中定义的大小(默认为64M),删除日志文件再重启;

5. 其他情况,查看日志文件(我的是localhost.localdomain.err,具体因人而异),然后具体分析;

我采用了第二条问题解决。

三、配置异步复制:

1、修改 slav 服务器的 server-id(master 服务器不变)

/etc/my.cnf

server-id = 10

2、授权(在 master 服务器上操作)

mysql> GRANTREPLICATION SLAVE ON *.*

-> TO'backup'@'192.168.0.102' IDENTIFIED BY 'backup';

Query OK, 0 rowsaffected (0.00 sec)

 

mysql> showmaster status; //主数据库状态,类似

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

| File |Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

|mysql-bin.000003 | 401 | | |

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

3、配置 slave 服务器

mysql> changemaster to

->master_host='192.168.0.101',

->master_user='backup',

->master_password='backup',

->master_log_file='mysql-bin.000003',

->master_log_pos=401;

Query OK, 0 rowsaffected (0.00 sec)

mysql> startslave;

Query OK, 0 rowsaffected (0.00 sec)

查看一下同步状态:

mysql> showslave status\G

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

Slave_IO_State:Waiting for master to send event

Master_Host:192.168.0.101

Master_User:replication

Master_Port:3306

Connect_Retry:60

Master_Log_File:mysql-bin.000003

Read_Master_Log_Pos:401

Relay_Log_File: XXX-relay-bin.000002

Relay_Log_Pos:253

Relay_Master_Log_File:mysql-bin.000003

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

Relay_Log_Space:411

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

1 row in set(0.00 sec)

注意:slave_IO进程及 slave_SQL 进程都必须正常运行

 

四、测试验证:

主从复制测试:在master 数据库服务器上创建库和表,然后再插入记录,再登

陆到 slave 服务器,看是否也建立相一致的库和表以及记录。

mysql> create database test_db;

Query OK, 1 row affected (0.00 sec)

mysql> use test_db;

Database changed

mysql> create table test_table(idint(5),name char(10));

Query OK, 0 rows affected (0.00 sec)

mysql> insert into test_table

-> values(01,aaa);

Query OK, 1 row affected (0.00 sec)

现在登录 slave 数据库服务器,看是否成功同步。

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| test |

| test_db |

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

4 rows in set (0.02 sec)

mysql> use test_db;

Database changed

mysql> show tables;

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

| Tables_in_test_db |

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

| test_table |

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

1 row in set (0.00 sec)

mysql> select * from test_table;

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

| id | name |

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

| 1 | aaa  |

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

1 row in set (0.00 sec)

OK,到此结束。

下次研究一下半同步复制。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值