MySQL的主从服务器配置(未完)

必备知识:
1、MYSQL 用户授权
1、查看用户授权表
select user,host,password from mysql.user
2、登录mysql
mysql -u root -p password -h (IP)
3、给从服务器设置授权用户账户
grant all on *.* to user(用户名)@192.168.2.1 identified by '123'(密码);
注:该账户必须授予 REPLICATION SLAVE 权限,这里为了方便,就设了all

 2、MYSQL bin-log 日志: 添加:bin-log的日志类型
1、解释:二进制日志
2、开始bin-log日志
配置文件中添加:
log-bin = mysql-bin(mysql-bin是文件的文件名)
3、查看是否开启log-bin
命令:
show variables like "%log-bin%"
4、与bin-log有关的日志刷新
1、flush logs :
此时就会多一个最新的bin-log日志
2、show master status; :
查看最后一个bin日志
3、reset master :
清空所有的bin-log日志
4、查看bin-log值日的内容:
命令:mysqlbinlog --no-defaults mysql-bin.00001 (--no-defaults:这个指令的作用就在于字符集的问题,原因可能是mysql开发的BUG)

      注:这个命令好像有点不对,不知是不是我写错了,2014-5-31:01:51:39,待查

3、MYSQL 主从复制
1、Mysql 数据的备份和数据丢失之后的找回
1、MYSQL 备份语句:
mysqldump -u root -p123 test(库名) -l -F > /tmp/test.sql
解释:其中 -l表示的意思,就是在备份期间锁定数据库,不能进行读写操作,而-F的作用是,重新生成新的日志文件,也包括log-bin日志
2、MYSQL 恢复语句:
mysql -uroot -p123 < test.sql
3、问题:
假设数据库备份的时间是在9点,但是服务器挂掉的时间是在10点,问如何恢复9点到10点之间的数据
 回答:
可以通过mysql的log-bin日志来恢复9点到10点之间的数据,用的的命令是 mysqlbinlog :
命令示范: mysqlbinlog --no-default mysql-bin.00001 --stop-position='280' | mysql -uroot -p123 test
命令解释:--stop-position='280' 这个参数,是指定需要恢复到哪条数据为止
:--start-position='106' 这个参数,是指从哪条数据开始恢复
:test 指的是要被恢复的数据库
4、MYSQL 的读写锁定:不适用 mysqldump(此命令已经自带参数 -l 进行锁定,并自动解锁)
锁定语句:flush tables with read lock;
解锁语句:unlock tables;

2、 MYSQL 的主从服务器配置:
1、MYSQL 主服务器的配置:
1、需要开启:
log-bin = mysql-bin(logs的文件名)
2、设置唯一的server-id:
server-id = 1 备注:取值范围 1 到 2的32次方 减 1
3、在主服务器上为从服务器建立访问权限:
命令:
grant all on *.* to user@192.168.2.1 identified by 123
解释:
在主服务器上建立一个拥有全部权限的用户user,操作范围是所有库和所有表,用户user的地址就是192.168.2.1,密码为123.注意:在访问时如果地址不正         确,则亦访问不了
4、备注:
1、主服务器配置文件选项:
binlog-do-db=mysql #需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql #不需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
log-slave-updates #这个参数一定要加上,否则不会给更新的记录些到二进制文件里
slave-skip-errors #是跳过错误,继续执行复制操作
2、MYSQL 从服务器的配置:
1、需要开启:
log-bin = mysql-bin
2、设置唯一的server-id:
server-id = 2
3、在从服务器的配置文件中,需要指定访问的主服务器的地址,端口以及所用到的用户名
实例:
master-host = 192.168.2.2
master-user = user
master-pass = 123
maste-port = 3306
master-connect-retry = 60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db = test #需要备份的数据库名
replicate-ignore-db=test #忽略的数据库
log-slave-updates #这个参数一定要加上,否则不会给更新的记录些到二进制文件里
slave-skip-errors #是跳过错误,继续执行复制操作
备注:
mysql> CHANGE MASTER TO
 -> MASTER_HOST='master_host_name',
 -> MASTER_USER='replication_user_name',
 -> MASTER_PASSWORD='replication_password',
 -> MASTER_LOG_FILE='recorded_log_file_name',
 -> MASTER_LOG_POS=recorded_log_position;
4、在从服务器上启动slave进程
命令:
mysql> start slave;
5、查看配置结果(status)
命令:
show slave status;
3、配之中常见的问题:
1、一般的异常只需要选择跳过一步即可解决
命令:-->slave stop;
  -->SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 ;
  -->slave start;
2、主键冲突,表已存在等错误:
方案:在 MYSQL 主服务器配置文件中跳过此类异常,继续下一步
slave_skip_errors = 1062, 1032, 1060

4、备注:
1、
当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。

2、
MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出 START SLAVE 时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服务器I/O 线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,从服务器使用此线程读取中继日志并执行日 志中包含的更新。SHOW PROCESSLIST 语句可以查询在主服务器上和从服务器上发生的关于复制的信息
3、
默认中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中 host_name 是从服务器主机名,nnnnnn是序列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中 继日志。默认中继日志索引文件名为host_name-relay-bin.index。在默认情况,这些文件在从服务器的数据目录中被创建。中继日志与 二进制日志的格式相同,并且可以用mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后,中继日志将会被自动删除。
4、
在主服务器上为复制设置一个连接账户。该账户必须授予 REPLICATION SLAVE 权限。如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。

4、MYSQL 分区技术

需巩固的地方:
1、可能需要用到的 Linux 命令:
1、pstree

2、ifconfig eth0 192.168.2.1

3、scp

2、window 命令:

3、Mysql 命令:
1、show status; \G

单词:
client -> 客户端
variable 变量
replicate 复制

 

posted @ 2014-05-31 01:48  还是原来的小年轻  阅读(545)  评论(0编辑  收藏  举报