mysql主从复制操作步骤,及常见问题

在配置主从的时候出现1032错误, 远程访问登录不上,需要配置主的授权,和修改my.ini 配置,(具体查看 2)

1.配置主 my.cnf  centos 目录(/etc/my.ini),错误日志(/var/log/mysqld.log),存储路径(/var/lib/mysql))

server-id              =  35                  #服务器id (主从必须不一样)

log-bin                =  D:/pro/phpStudy/MySQL/mysql-bin          #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径,如:/home/www/mysql_bin_log/mysql-bin

binlog-do-db          =  demo                # 要给从机同步的库

2.

如果被拒绝 需要  my.ini (设置放其他用户可以访问)

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

skip-name-resolve

skip-grant-tables

3. 主服务器授权用户

grant replication slave on *.* to 'root'@'192.168.174.131' identified by 'root';

grant all privileges on *.* to 'root'@'192.168.174.131' identified by 'root';    所有的

flush privileges; 需要刷新下

4.  从服务器配置

mysql -h192.168.0.3 -udemo2 -p123456  测试远程连接

从数据库配置

server-id                  =  131                  #服务器id (主从必须不一样)

#作为从机的配置

master-host                =  192.168.0.35            # 目标主机IP

master-user                =  root                # 目标主机用户名

master-password            =  root            # 目标主机密码

master-port                =  3306                # 目标主机端口

master-connect-retry      =  60                  # 链接重连间隔(单位s)

replicate-ignore-db        =  mysql              # 不从主机同步的数据库(多个写多行)

replicate-do-db            =  demo                # 要从主机同步的库(多个写多行)

#log-slave-update  # 启用从机服务器上的slave日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)

slave-skip-errors  # 跳过错误,从机一般应该配置该项

5.查看主数据库的bin-log状态

show master status\G;  获取前两个字段值 (主查询)

change master to  master_host='192.168.0.35', master_user='root' ,master_password='root', master_log_file='mysql-bin.000008' ,master_log_pos=1986;

show slave status\G;  查看状态 (从查询)

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

只要在这个现实yes就正常了

----------------数据异常--------------------

主从赋值时候,出现数据丢失

数据丢失较多的时候可以 重做

mysqldump -h192.168.0.35 -uroot -proot demo users > mysql2.bar.sql

dmeo:为数据库名称

users:为表名

mysqldump -u root -p --databases test mysql > D:\backup.sql  备份多个数据库

mysqldump -u username -p -all-databases > BackupName.sql  备份所有数据库

mysql -u root -p < C:\backup.sql  数据还原

source xxxx.sql 导入数据

mysqlhotcopy  热备份 比mysqldump速度快 备份需要lock table

mysql操作 锁表

//执行SQL语句 锁掉stat_num表

$sql = "LOCK TABLES stat_num WRITE"; //表的WRITE锁定,阻塞其他所有mysql查询进程

$DatabaseHandler->exeCute($sql);

//执行更新或写入操作

$sql = "UPDATE stat_num SET `correct_num`=`correct_num`+1 WHERE stat_date='{$cur_date}'";

$DatabaseHandler->exeCute($sql);

//当前请求的所有写操作做完后,执行解锁sql语句

$sql = "UNLOCK TABLES";

$DatabaseHandler->exeCute($sql);

备份数据 锁表

FLUSH TABLES WITH READ LOCK  整个数据库表都锁住

LOCK TABLES tbl_name READ;  只锁住指定的表, 不影响其他的表

unlock tables;

P.S.  MYSQL的read lock和wirte lock

read-lock:  允许其他并发的读请求,但阻塞写请求,即可以同时读,但不允许任何写。也叫共享锁

write-lock: 不允许其他并发的读和写请求,是排他的(exclusive)。也叫独占锁

你可能感兴趣的:(mysql主从复制操作步骤,及常见问题)