天天看点

Linux下MySQL数据库主从同步配置

Linux下MySQL数据库主从同步配置

一.配置mysql主数据库#172.30.65.122

mysql -u root-p#进入控制台

create databasecesudb#建立数据库测速db

insert intomysql.user(Host,User,Password)values('localhost','cesuuser',password('123456'));#创建用户cesuuser,密码是123456

grant all oncesudb.* to 'cesuuser'@'172.30.65.169' identified by '123456' with grantoption;#授予cesuuser的用户在nagios服务器172.30.65.169的机器上对cesudb的完全访问权限。

insert intomysql.user(Host,User,Password)values('localhost','cesudbbak',password('123456'));#创建mysql数据库主从同步用户cesudbbak,用户密码是123456。

grantreplication slave on *.* to 'cesudbbak'@'172.30.65.124' identified by '123456'with grant option;#授权cesudbbak用户正能在172.30.65.124的机器上访问主数据库并只有备份的权限。

flushprivileges;#刷新系统授权表

二.把Mysql主服务器172.30.65.122上的数据库 cesudb导入到Mysql从服务器172.30.65.124中

注意:在到处前可在控制台执行以下的命令

flush tableswith read lock;#数据库只读锁定命令,防止到处数据库的时候有数据写入。

导出数据库cesudb

mysqldump -uroot -p --default-character-set=utf8 --opt -Q -R --skip-lock-tables cesudb >/home/cesudbbak.sql#需要在主数据库服务器的shell>下操作,把数据库cesudb导出到/home目录下并重新命名为cesudbbak.sql。

unlock tables;#解除锁定,在mysql控制台执行

scpcesudbbak.sql [email protected]:/home#到/home目录下把该文件传到从数据库172.30.65.124的/home目录下。

2.进入从数据库#172.30.65.124

mysql -uroot -p

create databasecesudb;#建立数据库cesudb

use cesudb;使用数据库cesudb

source/home/cesudbbak.sql#导入备份文件到数据库

mysql -ucesudbbak -h 172.30.65.122 -p#测试在从数据库服务器172.30.65.124上登陆数据库主服务器172.30.65.122。该命令的执行要在shell>下面。

三.配置主数据库服务器172.30.65.122的my.cnf文件。

vim /etc/my.cnf#这里的本机的mysql是yum安装的,如果你是编译安装的需另行找到主配置文件并修改。

把该目录下的文件改为以下就可以了。

[mysqld]

datadir=/var/lib/mysql

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

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

server-id=1#需添加的行,该行制定为1表示主服务器

log-bin=mysql-bin#需添加的行,启动mysql二进制日志系统

binlog-do-db=cesudb#需添加的行,需要同步的数据库名,如有多个数据库可以重复添加此行

binlog-ignore-db=mysql#需添加的行,不同步mysql系统数据库

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

service mysqldrestart#重启mysql服务

mysql -u root-p#进入mysql控制台

show variableslike 'server_id';#查看server_id的值是否为1

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id    | 1    |

+---------------+-------+

1 row in set (0.00 sec)

show masterstatus#查看主服务器信息,出现以下类似的信息

mysql> showmaster status;

+------------------+----------+--------------+------------------+

| File            | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000006 |      106 | cesudb      |mysql            |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

注意:这里记住上面的File和Position的值,后面还会用到。

四.配置从数据库的my.cnf文件#172.30.65.124

vim /etc/my.cnf

修改为以下内容即可,该机器上的从数据库也是yum安装的,如自己机器上的数据库是编译安装的可以另行制定配置文件位置

[mysqld]

datadir=/var/lib/mysql

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

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

server-id=2#需添加的行,设置其值等于2,表示是从数据库

log-bin=mysql-bin#启动mysql二进制日志系统

replicate-do-db=cesudb#需要同步的数据库名,如果有多个数据库可以重复此参数,每个数据库一行

replicate-ignore-db=mysql#不同步mysql系统数据库

read_only#设置数据库只读

#bind-address=172.30.65.124

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

service mysqldrestart#重启数据库

mysql -u root-p#进入mysql控制台

show variableslike 'server_id';#看到id为2,表示正常

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id    | 2    |

+---------------+-------+

1 row in set (0.00 sec)

 slavestop;#停止slave同步进程

change master tomaster_host='172.30.65.122',master_user='cesudbbak',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=106;#执行同步语句,master_log_file和master_log_pos就是上面提到的那连个值

mysql> change master tomaster_host='172.30.65.122',master_user='cesudbbak',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=106;

Query OK, 0 rows affected (0.02 sec)

slave start;#开启slave同步进程

SHOW SLAVESTATUS\G#查看同步信息,会出现以下的同步信息

mysql> SHOW SLAVE STATUS\G

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

              Slave_IO_State: Waiting formaster to send event

                  Master_Host:172.30.65.122

                  Master_User:cesudbbak

                  Master_Port:3306

                Connect_Retry: 60

              Master_Log_File:mysql-bin.000006

          Read_Master_Log_Pos: 106

              Relay_Log_File:mysqld-relay-bin.000002

                Relay_Log_Pos: 251

        Relay_Master_Log_File: mysql-bin.000006

            Slave_IO_Running: Yes

           Slave_SQL_Running: Yes

              Replicate_Do_DB: cesudb

          Replicate_Ignore_DB: mysql

          Replicate_Do_Table: 

      Replicate_Ignore_Table: 

      Replicate_Wild_Do_Table: 

  Replicate_Wild_Ignore_Table: 

                  Last_Errno: 0

                 Last_Error: 

                Skip_Counter: 0

          Exec_Master_Log_Pos: 106

              Relay_Log_Space: 407

              Until_Condition: None

              Until_Log_File: 

                Until_Log_Pos: 0

          Master_SSL_Allowed: No

          Master_SSL_CA_File: 

          Master_SSL_CA_Path: 

              Master_SSL_Cert: 

            Master_SSL_Cipher: 

              Master_SSL_Key: 

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error: 

              Last_SQL_Errno: 0

              Last_SQL_Error: 

1 row in set (0.00 sec)

注意出现红色字体的部分,以上的连个参数出现yes代表配置成功。

五.测试主从配置

1.在主数据库上建立一个表student#172.30.65.122

mysql -u root -p

use cesudb;

create table...#建一个测试表

mysql> create table student (

    -> id int,

    -> name char(10),

    -> sex char(2));

Query OK, 0 rows affected (0.02 sec)

mysql> show tables;

+------------------+

| Tables_in_cesudb |

+------------------+

| student          |

+------------------+

1 row in set (0.00 sec)

2.登录从数据库查看该表#172.30.65.124

mysql> usecesudb

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+------------------+

| Tables_in_cesudb |

+------------------+

| student          |

+------------------+

1 row in set (0.00 sec)

已经自动同步过来,说明同步成功。