分类: Mysql/postgreSQL
2011-10-10 10:29:45
mysql主从同步需要两台服务器,分别安装mysql服务。
主:
root@alex:~# apt-get install mysql-server
安装时输入mysql用户名密码
root@alex:~#mysql -uroot -p \\-u 用户名 –p用户密码
mysql> create database abc; \\建立数据库
mysql> quit
root@alex:~# vim /etc/mysql/my.cnf
server-id = 1 \\ 给服务器分配一个独一无二的ID编号;
log_bin = /var/log/mysql/mysql-bin.log \\启动二进制日志,设置日志存放位置
expire_logs_days = 10 \\二进制日志自动删除的天数。默认值为0,表示”没有自动删除“。设置完这个参数之后需要执行flush logs
max_binlog_size = 100M \\二进制日志文件的最大长度,当超过这个最大长度之前,MySQL服务器会自动提供一个新的二进制日志文件接续上。
binlog_do_db = abc 要同步的数据库
binlog_ignore_db = *** 不要同步的数据库
root@alex:~#mysql -uroot -p
mysql> grant replication slave,reload,super on *.* to 'root'@'192.%' identified by 'debian'; 更新 超权限 用户.数据库 为账户给定一个密码
授予slave服务器有复制操作权利。
mysql> flush tables with read lock; \\所表 防止发生意外
mysql> quit
root@alex:~# mysqldump -uroot -p abc > abc.sql \\备份数据库
root@alex:~#mysql -uroot -p
mysql> unlock tables; \\解锁,因为不解锁,从机无法同步数据。
mysql> show master status; \\查看主服务器数据库情况
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 831 | abc | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
从:
root@alex1:~# apt-get install mysql-server
安装时输入mysql用户名密码
root@alex1:~# vim /etc/mysql/my.cnf
server-id = 2 \\设定主机编号 应与master不同
master-host = 192.168.108.102 \\设定主服务器IP
master-user = root \\设定登录主机服务器用户
master-password = debian \\设定登录主机服务器密码
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
replicate-do-db = abc \\要同步的数据库
master-connect-retry = 30 \\与主服务器链接重试时间
root@alex1:~# mysql –uroot –pdebian
mysql> show databases;
mysql> create database abc;
mysql>source /root/abc.sql;
root@alex1:~# show slave status\G; \\查看slave服务器状态 \G列表形式
分别把主、从服务器mysql服务重新启动
root@alex:~# service mysql restart
root@alex1:~# service mysql restart
测试:
在主mysql服务器中添加表
mysql> create table addressbook(username varchar(20),password varchar(40)) TYPE=MyISAM;
mysql> insert into addressbook(username,password)values (‘zhangsan’,’ 13901234561’);
mysql> insert into addressbook(username,password)values (‘lisi’,’13801234567’);
mysql> quit
在从mysql服务器中查看表
mysql> show databases;
mysql> use abc;
mysql> select * from addressbook;
如有张三和李四用户 表示同步成功
注:如远程登录mysql 需把my.cnf中bind-address 注释即可。
如果同步二进制文件不一样 需要进行手动同步 才可清除错误 slave IO =no sql = no
先查看主的二进制文件名和Position
到slave服务器上执行手动同步:
mysql> change master to
> master_host='master_ip',
> master_user='user',
> master_password='pwd',
> master_port=3306,
> master_log_file='mysql-bin.000020',
> master_log_pos=135617781;
1 row in set (0.00 sec)
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0