注:以下过程为本人亲测,如有问题请留言,未经许可,请勿转载
有两台服务器:
主服务器:10.130.24.**4
从服务器:10.130.24.**7
需要同步的数据库名为:全部数据库,
一、配置主服务器
修改配置文件my.cnf
#vi /etc/my.cnf
[mysqld]
server-id = 1 #主机标示,整数
log-bin=/var/log/mysql/mysql-bin.log #开启二进制日志,确保此文件可写
read-only = 0 #主机,读写都可以
sync_binlog = 1 #每经过1次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。
innodb_flush_log_at_trx_commit = 1 #设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步
expire_logs_days=10 #二进制日志过期时间
重启MySQL:
#service mysqld restart
登录MySQL服务器。
#mysql -uroot –p123456
在主服务器新建一个用户赋予“REPLICATION SLAVE”的权限。
insert into mysql.user(Host,User,Password) values("10.130.24.77","replicate",password("123456"));
flush privileges;
grant all privileges on *.* to replicate@'10.130.24.77' identified by '123456' with grant option;
flush privileges;
执行以下命令锁定数据库以防止写入数据。
mysql>flush tables with read lock;
这时不要退出mysql命令行,因为退出命令行后,全局表锁就失效,新开一个窗口继续执行以下命令。
导出数据库
#mysqldump -u root -p123456 --all-databases > /root/all.sql
再次连接数据库进入mysql命令行查看master状态。
mysql>SHOW MASTER STATUS; 记下显示的信息,配置从服务器会用到。
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 | 88438818 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
解锁数据表
mysql>UNLOCK TABLES;
二、配置从服务器
导入主服务器的数据库
scp /root/all.sql root@10.130.24.**7:/root
#mysql -u root -p123456 < /root/all.sql
编辑配置文件my.cnf
[mysqld]
server-id = 2 #可以自己定义,只要保证唯一的就行
log_bin = /var/log/mysql/mysql-bin.log
master-host =10.130.24.**4
master-user =replicate
master-pass =123456
master-port =3306
master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
保存文件并重启mysqld。
#service mysqld restart
连接主服务器。
mysql>change master to
>master_host='10.130.24.**4',master_user='replicate',master_password='123456',
>master_log_file='mysql-bin.000006',master_log_pos=299879;
启动slave进程。
mysql>start slave;
查看mysql的日志,一般在/var/log/目录下,如果启动成功,你应该会看到类似下面的日志。
091104 8:42:02 [Note] Slave I/O thread: connected to master‘root@X.X.X.X:3306?, replication started in log‘mysql-bin.000001? at position 98
注:设置主服务器的数据库二进制日志的过期时间,可以在配置文件中使用参数expire_logs_days来设定。
三、验证
主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:
mysql> create database hi_db;
Query OK, 1 row affected (0.02 sec)
mysql> use hi_db;
Database changed
mysql> create table hi_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.05 sec)
mysql> insert into hi_tb values(001,'bobu');
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| acdcenter |
| axxw |
| customerlog |
| enterpriseuc |
| errorcode |
| hi_db |
| ipinfo_v3
从服务器Mysql查询验证。
mysql> select * from hi_tb;
+------+------+
| id | name |
+------+------+
| 1 | bobu |
+------+------+
1 row in set (0.00 sec)