Mysql主从复制教程
1.安装mysql(安装步骤跳过)
2.配置密码。(如果忘记密码或者误操作删除了root用户,使用如下命令,没有忘记就跳到3)
将skip-grant-tables放在/etc/my.cnf里的[mysqld]下的第一行,可免密码登录,然后更新或者插入user表数据。
set password=password("root");(设置新密码)
CREATE USER 'replication'@'192.168.3.212' IDENTIFIED BY 'root';
update user set Host='%',select_priv='y', insert_priv='y',update_priv='y', Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';
flush privileges;刷新MySQL的系统权限相关表。
3.主从数据库只是配置而已,不需要额外代码。但是如果配置不好,会花很长时间反复修改。
4.开始正题。
主从更新就是主库增删改查的时候,从库也会进行操作,而且是读取bin日志进行操作。
主库需要添加一个用户(为的是不让从用root账户,用别的用户更安全)供从访问。
5.关闭防火墙(更好的办法是将3306端口放入防火墙计划,/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT )。
6.很多文件需要给相应的权限。
7.启动:/usr/local/mysql/support-files/mysql.server start或者$ service mysql.server start。
8.启动mysql:mysql -u root -p回车 输入密码(root)。
9.设置可远程登录
mysql> use mysql;
mysql> update user set host = '%' where user ='root';
mysql> flush privileges;
10.master配置my.cnf
vi /etc/my.cnf
在[mysqld]下加
log-bin=mysql-bin
server-id=1
///////
11.CREATE USER 'replication'@'192.168.3.128' IDENTIFIED BY 'root';(给从机使用的用户名和密码)
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.3.128';(给予相应权限)
flush privileges;刷新MySQL的系统权限相关表。
show master status;//显示主库状态
12.配置slave
vi /etc/my.cnf
在[mysqld]下加
log-bin=mysql-bin
server-id=2 //(总之slave之间的id不能一样)
START SLAVE; //开启slave stop slave; //关闭slave
show slave statusG //查看复制状态
其中Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master 0
13.如果需要手动同步,执行下列
change master to master_host='主库ip',master_user='主库给其他从库准备的用户名',master_password='主库给其他库准备的密码',master_log_file='主库status的file',master_log_pos='主库status的position';
CHANGE MASTER TO MASTER_HOST='192.168.3.128', MASTER_USER='replication', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-sbin.000001', MASTER_LOG_POS=154;
14.如果报错,不外乎用户名密码不对(去主库修正为正确密码),网络(要一个网段),防火墙(3306加入防火墙计划)等。
还有一种是3102错误,所以要确保主从开始之前,mysql没有任何bin(mysql-bin)日志。
只需要将master的mysql-bin删除即可,命令:reset master。
这个只能在没开始复制之前进行。在复制中的情况下需要用expire_logs_days = 7设置七天删除。