两台虚拟机192.168.183.131和192.168.183.132,装完系统之后直接把所有开发包都装上
下载软件包mysql-5.6.10.tar.gz,cmake-2.8.10.2.tar.gz(从5.5开始mysql使用cmake来进行编译了而不是之前的configure)

mysql的编译安装

1.首先安装cmake

  1. [root@localhost ~]# tar -xvf cmake-2.8.10.2.tar.gz
  2. [root@localhost ~]# cd cmake-2.8.10.2
  3. [root@localhost cmake-2.8.10.2]# ./configure
  4. [root@localhost cmake-2.8.10.2]# make;make install

2.安装mysql
1)创建mysql用户和组

  1. [root@localhost ~]# groupadd mysql
  2. [root@localhost ~]# useradd -g mysql mysql
  3. [root@localhost ~]# mkdir /usr/local/mysql
  4. [root@localhost ~]# chown -R mysql.mysql /usr/local/mysql

2)解压缩mysql,进行编译安装

  1. [root@localhost ~]# tar -xvf mysql-5.6.10.tar.gz
  2. [root@localhost ~]# cd mysql-5.6.10
  3. [root@localhost ~]# cmake \
  4. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  5. -DMYSQL_DATADIR=/user/local/mysql/data \
  6. -DSYSCONFDIR=/etc \
  7. -DEXTRA_CHARSETS=all \
  8. -DDEFAULT_CHARSET=utf8 \
  9. -DDEFAULT_COLLATION=utf8_general_ci \
  10. -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  11. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  12. -DWITH_BLACKHOLE_STORAGE_ENGINE=1  \
  13. -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  14. -DWITH_PARTITION_STORAGE_ENGINE=1 \
  15. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  16. -DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock  \
  17. -DMYSQL_TCP_PORT=3306 \
  18. -DWITH_DEBUG=0 \
  19. -DENABLED_LOCAL_INFILE=1
  20. [root@localhost ~]# make;make install
  21. [root@localhost ~]# cd /usr/local/mysql/
  22. [root@localhost mysql]# chown -R root.mysql *
  23. [root@localhost mysql]# chown -R mysql.mysql data/

3)创建主配置文件和启动脚本

  1. [root@localhost data]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
  2. [root@localhost ~]# vi /etc/my.cnf
  3. basedir = /usr/local/mysql
  4. datadir = /usr/local/mysql/data
  5. port = 3306
  6. server_id = 131
  7. socket = /var/run/mysqld/mysqld.sock
  8. user = mysql
  9. log-error = /var/log/mysqld.log
  10. [root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  11. [root@localhost data]# vi /etc/init.d/mysqld
  12. basedir=/usr/local/mysql
  13. datadir=/usr/local/mysql/data
  14. mysqld_pid_file_path=/var/run/mysqld/mysqld.pid

4)把mysql的相关文件录入系统
配置mysql命令的搜索路径
打开/etc/profile文件找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC在这句之前添加export PATH=$PATH:/usr/local/mysql/bin 就会对所有用户有效并且开机自动生效了

告知系统mysql库文件的存放位置 
编辑/etc/ld.so.conf.d/mysql.conf 添加/usr/local/mysql/lib
ldconfig -v |grep mysql 
ldconfig会按照系统库文件的搜索路径把系统中所有的库文件重新加载一遍

告知系统mysql头文件的位置 
ln -sv /usr/local/mysql/include /usr/include/mysql

配置mysql的man手册页 
vi /etc/man.config添加 MANPATH=/usr/local/mysql/man

5)初始化数据库并且启动

  1. [root@localhost scripts]# pwd
  2. /usr/local/mysql/scripts
  3. [root@localhost scripts]# mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
  4. [root@localhost ~]# chkconfig --add mysqld
  5. [root@localhost ~]# service mysqld start

6)配置第二台mysql,直接复制过去

  1. [root@localhost ~]# scp -r /etc/my.cnf 192.168.183.132:/etc
  2. [root@localhost ~]# scp -r /etc/init.d/mysqld 192.168.183.132:/etc/init.d
  3. [root@localhost ~]# scp -r /usr/local/mysql 192.168.183.132:/usr/local
  4. [root@localhost ~]# scp -r /etc/ld.so.conf.d/mysql.conf 192.168.183.132:/etc/ld.so.conf.d/
  5. [root@localhost ~]# groupadd mysql
  6. [root@localhost ~]# useradd -g mysql mysql
  7. [root@localhost ~]# chown -R mysql.mysql /usr/local/mysql
  8. [root@localhost ~]# cd /usr/local/mysql
  9. [root@localhost ~]# chown -R root.mysql *
  10. [root@localhost ~]# chown -R mysql.mysql data/

在132上面把/etc/my.cnf配置文件中的server-id改成132,然后重复进行第四部

主从复制的配置

1.把131配置成主库,把132配置成从库
1)在131上面打开二进制日志

修改配置文件/etc/my.cnf,添加log-bin = mylog.000001

重启mysql

2)然后建一个用户,授权可以读取自己的二进制日志

  1. mysql> grant replication slave on *.* to slave@'192.168.183.132' identified by 'mapabc';
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql> flush privileges;
  4. Query OK, 0 rows affected (0.00 sec)

3)从库上面登录测试

  1. [root@localhost ~]# mysql -u slave -p -h 192.168.183.131
  2. Enter password:
  3. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  4. mysql> show databases;
  5. +--------------------+
  6. | Database           |
  7. +--------------------+
  8. | information_schema |
  9. | test               |
  10. +--------------------+
  11. 2 rows in set (0.00 sec)

4)主库上面查看当前的POS号

  1. mysql> show master status;
  2. +--------------+----------+--------------+------------------+-------------------+
  3. | File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +--------------+----------+--------------+------------------+-------------------+
  5. | mylog.000001 |      412 |              |                  |                   |
  6. +--------------+----------+--------------+------------------+-------------------+
  7. 1 row in set (0.00 sec)

5)在从库上面配置

  1. mysql> CHANGE MASTER TO
  2. -> MASTER_HOST='192.168.183.131',
  3. -> MASTER_USER='slave',
  4. -> MASTER_PASSWORD='mapabc',
  5. -> MASTER_LOG_FILE='mysql.000001',
  6. -> MASTER_LOG_POS=412;
  7. Query OK, 0 rows affected, 2 warnings (0.08 sec)

6)查看从库状态并启动从库

  1. mysql> show slave status\G;
  2. *************************** 1. row ***************************
  3. Slave_IO_State:
  4. Master_Host: 192.168.183.131
  5. Master_User: slave
  6. Master_Port: 3306
  7. Connect_Retry: 60
  8. Master_Log_File: mysql.000001
  9. Read_Master_Log_Pos: 412
  10. Relay_Log_File: mysqld-relay-bin.000001
  11. Relay_Log_Pos: 4
  12. Relay_Master_Log_File: mysql.000001
  13.              Slave_IO_Running: No 
  14.             Slave_SQL_Running: No 
  15. mysql> start slave;
  16. mysql> show slave status\G;
  17. *************************** 1. row ***************************
  18. Slave_IO_State: Waiting for master to send event
  19. Master_Host: 192.168.183.131
  20. Master_User: slave
  21. Master_Port: 3306
  22. Connect_Retry: 60
  23. Master_Log_File: mylog.000001
  24. Read_Master_Log_Pos: 412
  25. Relay_Log_File: relay-bin.000002
  26. Relay_Log_Pos: 279
  27. Relay_Master_Log_File: mylog.000001
  28.              Slave_IO_Running: Yes 
  29.             Slave_SQL_Running: Yes 

7)测试
主库131创建数据库

  1. mysql> create database db5;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> show databases;
  4. +--------------------+
  5. | Database           |
  6. +--------------------+
  7. | information_schema |
  8. | db5                |
  9. | mysql              |
  10. | performance_schema |
  11. | test               |
  12. +--------------------+
  13. 5 rows in set (0.00 sec)

从库上面查看

  1. mysql> show databases;
  2. +--------------------+
  3. | Database           |
  4. +--------------------+
  5. | information_schema |
  6. | db5                |
  7. | mysql              |
  8. | performance_schema |
  9. | test               |
  10. +--------------------+
  11. 5 rows in set (0.01 sec)

已经同步过来了。

把132配置成主库,把131配置成132的从库
1)对于主从复制来说,主库可以接受读写,从库只能读不能写,一旦从库有写入操作,造成主从库数据不一致,复制立马就断开了,我们就在131上面建立一个授权帐号让它同步到132上面

  1. mysql> grant replication slave on *.* to slave@'192.168.183.131' identified by 'mapabc';
  2. Query OK, 0 rows affected (0.00 sec)

2)打开132的二进制日志,把132配置成主库,然后重启132的mysql

3)在131上面配置

  1. mysql> CHANGE MASTER TO
  2. -> MASTER_HOST='192.168.183.132',
  3. -> MASTER_USER='slave',
  4. -> MASTER_PASSWORD='mapabc',
  5. -> MASTER_LOG_FILE='mylog.000001',
  6. -> MASTER_LOG_POS=120;
  7. Query OK, 0 rows affected, 2 warnings (0.12 sec)
  8. mysql> start slave;
  9. Query OK, 0 rows affected (0.01 sec)

4)测试
在132上面创建数据库

  1. mysql> create database db4;
  2. Query OK, 1 row affected (0.01 sec)

在131上面查看,看到已经同步过来了

  1. mysql> show databases;
  2. +--------------------+
  3. | Database           |
  4. +--------------------+
  5. | information_schema |
  6. | db4                |
  7. | db5                |
  8. | mysql              |
  9. | performance_schema |
  10. | test               |
  11. +--------------------+
  12. 6 rows in set (0.00 sec)

至此,主主同步配置完成。