MySql 搭建主从同步,实现读写分离。

首先服务器搭建好数据库

搭建主从同步

修改主服务器master:

#vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[必须]启用二进制日志
       server-id=222      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

修改从服务器slave:

   #vi /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin   //[不是必须]启用二进制日志
       server-id=226      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

重启两台服务器的mysql

service mysql restart

进入数据库

mysql -uroot -proot

在主服务器上建立帐户并授权slave: (如果遇到问题 翻阅下面)

GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,@表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,

登录主服务器的mysql,查询master的状态

mysql>show master status;

   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000004 |      308 |              |                  |
   +------------------+----------+--------------+------------------+

配置从服务器Slave:

 mysql>change master to master_host='192.168.145.222',master_user='mysync',master_password='q123456',master_log_file='mysql-bin.000004',master_log_pos=308;   
 
 //注意不要断开,308数字前后无单引号。

检查从服务器复制功能状态:

mysql> show slave status\G

   *************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222  //主服务器地址
Master_User: mysync   //授权帐户名,尽量避免使用root
Master_Port: 3306    //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes    ==//此状态必须YES==
Slave_SQL_Running: Yes   ==//此状态必须YES==
                        ......

测试 (如果测试遇到问题 下面也有解决策略。)

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据

 mysql> create database hi_db;
  Query OK, 1 row affected (0.00 sec)

  mysql> use hi_db;
  Database changed

  mysql>  create table hi_tb(id int(3),name char(10));
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> insert into hi_tb values(001,'bobu');
  Query OK, 1 row affected (0.00 sec)

  mysql> show databases;
   +--------------------+
   | Database           |
   +--------------------+
   | information_schema |
   | hi_db                |
   | mysql                |
   | test                 |
   +--------------------+
   4 rows in set (0.00 sec)

从服务器Mysql查询:

mysql> show databases;

   +--------------------+
   | Database               |
   +--------------------+
   | information_schema |
   | hi_db                 |       //I'M here,大家看到了吧
   | mysql                 |
   | test          |

   +--------------------+
   4 rows in set (0.00 sec)

   mysql> use hi_db
   Database changed
   mysql> select * from hi_tb;           //查看主服务器上新增的具体数据
   +------+------+
   | id   | name |
   +------+------+
   |    1 | bobu |
   +------+------+
   1 row in set (0.00 sec)

密码策略问题异常信息:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

img

解决办法:

1、查看 mysql 初始的密码策略,

输入语句 “ SHOW VARIABLES LIKE ‘validate_password%’; ” 进行查看,
如下图:

img

2、首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,

输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值,如下图:

img

3、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,

img

4、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,
输入修改语句 “ ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’; ” 可以看到修改成功,表示密码策略修改成功了!!!

img

关于 mysql 密码策略相关参数;
1)、validate_password_length 固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数。

Slave两个关键进程

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己

如果是Slave_SQL_Running:no:

img

解决办法

MariaDB [(none)]> stop slave;                                                      
MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;            
MariaDB [(none)]> start slave;                                                      
MariaDB [(none)]> show slave status\G  

img

如果是slave_io_running:no

img

解决办法:

1.查看主服务器。
MariaDB [(none)]> show master status\G 

img

2.在从服务器上查看。

img

问题所在:发现Master_Log_File没有对应。

3.出现Slave_IO_Running: No的机器上操作

MariaDB [(none)]> slave stop;                 
MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0;  
MariaDB [(none)]> slave start;                               
MariaDB [(none)]> show slave status\G 

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值