设为首页 收藏本站
查看: 598|回复: 0

[经验分享] Mysql主从配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-14 08:32:05 | 显示全部楼层 |阅读模式
在原来LNMP 的环境下
[iyunv@LNMP ~]# vim /etc/init.d/mysqld #查找数据库的安装路径
[iyunv@LNMP ~]# cd /data/mysql/
[iyunv@LNMP mysql]# ls
[iyunv@LNMP mysql]# tar czvf discuz.tar /data/mysql/discuz/
#备份之前的discuz 论坛数据库表。
-----------------------------------------------------------------------
安装mysql:

[iyunv@LNMP mysql]# rm -rf /usr/local/mysql  #删除之前的安装
[iyunv@LNMP mysql]# cd /usr/local/src/
[iyunv@LNMP src]# tar zxvf mysql-5.1.73-linux-x86_64-glibc23.tar.gz
[iyunv@LNMP src]# mv mysql-5.1.73-linux-x86_64-glibc23 /usr/local/mysql

[iyunv@LNMP src]# ls /usr/local/mysql
bin  COPYING  data  docs  include  INSTALL-BINARY  lib  man  mysql-test  README  scripts  share  sql-bench  support-files
[iyunv@LNMP src]# grep 'mysql' /etc/passwd  #检查有没有 mysql 这个用户,如果没有就创建
mysql:x:500:500::/home/mysql:/sbin/nologin

[iyunv@LNMP mysql]# cp support-files/my-small.cnf  /etc/my.cnf  #拷贝配置文件
cp: overwrite `/etc/my.cnf'? y

[iyunv@LNMP mysql]# cp support-files/mysql.server  /etc/init.d/mysqld
cp: overwrite `/etc/init.d/mysqld'? y
[iyunv@LNMP ~]# vim /etc/init.d/mysqld #编译mysql配置文件

basedir=/usr/local/mysql  #安装路径
datadir=/data/mysql       #数据库路径
[iyunv@LNMP mysql]# rm -rf /data/mysql #删除原来的/datadir
[iyunv@LNMP mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
#初始化 ,看到下面两个OK,则安装完成
[iyunv@LNMP mysql]# echo $?
0
[iyunv@LNMP mysql]# ls /data/mysql  #安装无误会生成这两个目录
mysql  test
wKiom1hOccXyoN-tAAC2hU9Ivrg893.jpg
[iyunv@LNMP ~]# /etc/init.d/mysqld start #启动mysql
[iyunv@LNMP ~]# ps aux |grep mysql       #查看
[iyunv@LNMP ~]# netstat -lnp |grep 3306
wKioL1hOZ32TEmyDAAFlcvOyU_E924.jpg
----------------------------------------分割线----------------------------------------
[iyunv@LNMP ~]# cd /usr/local/
[iyunv@LNMP local]# ls
bin  etc  games  include  jdk1.8.0_112  lib  lib64  libexec  man  mysql  nginx  php  pureftpd  resin  sbin  share  src  tomcat
[iyunv@LNMP local]# cp -r mysql mysql_slave  #创建第二个mysql (复制)


[iyunv@LNMP mysql_slave]# chown -R mysql:mysql /data/mysql_slave #



[iyunv@LNMP mysql_slave]# cp /etc/my.cnf . #拷贝配置文件到mysql_slave 下


[iyunv@LNMP mysql_slave]# vim my.cnf  #编译配置文件

# The MySQL server
[mysqld]
port            = 3307         #3306 改为3307
socket          = /tmp/mysql_slave.sock #/tmp/mysql.sock改为/tmp/mysql_slave.sock
datadir         = /data/mysql_slave #定义数据库的目录



[iyunv@LNMP mysql_slave]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql_slave #初始化数据库

[iyunv@LNMP mysql_slave]# cd /etc/init.d/

[iyunv@LNMP init.d]# cp mysqld mysqldslave  #复制启动文件

root@LNMP init.d]# vim mysqldslave #编译启动文件
basedir=/usr/local/mysql_slave #mysql 更改为mysql_slave
datadir=/data/mysql_slave  #mysql 更改为mysql_slave
conf=/$basedir/my.cnf #(这一条也可以写在这里)

# Try to find basedir in /etc/my.cnf
  conf=/$basedir/my.cnf   #更改conf=/etc/my.cnf 为 conf=/$basedir/my.cnf
-----------------------------------------------------------------------
[iyunv@LNMP init.d]# /etc/init.d/mysqldslave start
Starting MySQL. SUCCESS!
[iyunv@LNMP init.d]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[iyunv@LNMP init.d]# netstat -lnp |grep mysql #两个mysql 都启来了
#扩展,如查需求还要启动一个mysql怎么解决

?按照开始的配置重新再配置即可。
wKiom1hOrtvixaJYAAFXCy7jjDk048.jpg
(因为楼主是LNMP 的环境下来搭建的,在这过程中出现了的些差错,由于楼主是个初学小白,排错的经验少了点,这之前出个两个问题,一是mysql帐户登不了,二是第二个mysql 初始化的时候不成功。
mysql登不了,是没有赋权,赋权就好了[iyunv@LNMP mysql_slave]# chown -R mysql:mysql /data/mysql_slave 。初始化不成功)

---------------------------------------------------------------------------------
Mysql 主从配置:主是3306 从是3307
登录mysql 的几种方工
[iyunv@LNMP ~]# which mysql
/usr/bin/mysql  #楼主预装了mysql 的命令

[iyunv@LNMP ~]# /usr/local/mysql/bin/mysql #如果没有预装,就用绝对路径来登mysql
(把mysql安装目录,比如MYSQLPATH/bin/mysql,映射到/usr/local/bin目录下:
# cd /usr/local/bin
# ln -fs /MYSQLPATH/bin/mysql mysql)


[iyunv@LNMP ~]# mysql -S /tmp/mysql.sock #通过端口登录

[iyunv@LNMP ~]# mysql #直接命令登录

[iyunv@LNMP ~]# mysql -S /tmp/mysql_slave.sock #3307 的登录

[iyunv@LNMP ~]# mysql -h127.0.0.1 -P3307 #通过端口登,(大P)

------------------------------------------------------------
[iyunv@LNMP ~]# mysql -S /tmp/mysql.sock

mysql> create database db1;  #创建一个测试数据库
Query OK, 1 row affected (0.05 sec)

[iyunv@LNMP ~]# mysqldump -S /tmp/mysql.sock mysql > 123.sql  #拷贝一些测试数据
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
[iyunv@LNMP ~]# mysql -S /tmp/mysql.sock db1 < 123.sql  #恢复数据到db1
mysql> use db1;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_db1             |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
23 rows in set (0.00 sec)

[iyunv@LNMP ~]# vim /etc/my.cnf #配置主的配置文件
server-id       = 1  #打开server-id,这个数值主和从不能一样
og-bin=mysql-bin #打开log-bin,文件名是可以自定义的,楼主改为"rizhi"。
binlog-do-db=db1 #只针对db1做主从,后面可以跟多个库
#扩展(binlog-ignore-db=mysql,如果有上百个库,可以反向思考,做个黑名单,指定不同步的库mysql)
[iyunv@LNMP ~]# /etc/init.d/mysqld restart #配置完成后,重启Mysql
Shutting down MySQL... SUCCESS!
Starting MySQL. SUCCESS!

[iyunv@LNMP ~]# ls /data/mysql  #系统会生成一个mysql-bin 为前缀的文件
db1  ibdata1  ib_logfile0  ib_logfile1  LNMP.err  LNMP.pid  mysql  mysql-bin.000001  mysql-bin.index  test

[iyunv@LNMP ~]# mysql -S /tmp/mysql.sock  #登录主,创建用户 replication:权限 ,repl:用户名

mysql> grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;  #刷新权限
Query OK, 0 rows affected (0.00 sec)

mysql> flush tables with read lock; #锁死读的权限
Query OK, 0 rows affected (0.00 sec)

mysql> show master status; #查看mrizhi.0000001 的相关数据,在配置从同步的时候会用到
wKiom1hPfuOwVEcRAAB8i11Nilc572.jpg

-----------------------------------------
[iyunv@LNMP ~]# vim /usr/local/mysql_slave/my.cnf  #从的配置
server-id       = 1111 #打开server-id,且自定义更改1111
#replicate-do-db=db1(扩展)

[iyunv@LNMP ~]# ls
123.sql anaconda-ks.cfg  install.log  install.log.syslog  opt  www.blog-andy.com.conf
[iyunv@LNMP ~]# mysql -S /tmp/mysql_slave.sock -e "create database db1" #在从上创建db1
[iyunv@LNMP ~]# mysql -S /tmp/mysql_slave.sock db1<123.sql
                                      # 要实现同步,就要保证这两台机上库是一样的

[iyunv@LNMP ~]# mysql -S /tmp/mysql_slave.sock #登录从

mysql> slave stop;  #关掉数据库
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host='127.0.0.1', master_port=3306, master_user='repl', master_password='123456',master_log_file='rizhi.000001', master_log_pos=106;
Query OK, 0 rows affected (0.04 sec)
#这是个关键核心配置,语法拼写,一定要严谨。

mysql> slave start; #启动从
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G; #查看状态 #没有配置成功

wKioL1hPg2mQ1WEwAAFQUgWCNqU098.jpg

查看下面的报错:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
[iyunv@LNMP ~]# /etc/init.d/mysqldslave restart #重启从,刚才修改了server-id 没有重启
[iyunv@LNMP ~]# mysql -S /tmp/mysql_slave.sock
mysql> show slave status\G;

wKiom1hPhGvhAPijAAD9koCFkPw218.jpg
------------------------------------------------------
主从测试:
在主上的操作:
(mysql> flush tables with read lock; #因为之前有锁死的操作)

mysql>unlock tables;  #解锁读的权限

mysql> use db1;
Database changed
mysql> show tables;


mysql> drop table help_category;

在从上的操作:
mysql> use db1;
Database changed
mysql> show tables;#详情见下图,同步成功。


wKiom1hPiWqRoOT1AAE-5Bf-Ax4870.jpg


在主上的操作: 创建表

mysql> show create table user\G:  #用user表做范例
Create Table: CREATE TABLE `user` (
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
。。。。。。下略


CREATE TABLE `linuxt`
(
  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
  `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
  `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
  `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
。。。。。。。。。。。
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges';
#在结尾去加分号“;”在命名表名的时候不要有数字,楼主开始的表名内有数字,总是报错。

mysql> use db1;
mysql> show tables;




wKiom1hPm1PzW_X0AAExAIYClBs691.jpg


删除数据库操作:在从上同步成功。
wKiom1hPndaBkkhhAAFDJPsQSfw775.jpg



----------------------------------------------------------------------
mysql 的主从机制相当的脆弱,很容易就中断了,楼主在实验的过程中,不小心在从上进行了数据表的创建,最后发现不对。回到主上现来操作,发现创建不了,最后只能重新恢复数据表,再重新操作。
在实际生产环境中,做监控。
Slave_IO_Running: Yes #监控这两项是不是YES
Slave_SQL_Running: Yes
Last_IO_Error: (查看此处有没有报错)

一定不要在从上去写数据,这样操作会导致数据库紊乱。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-313955-1-1.html 上篇帖子: mysql通用二进制格式安装 下篇帖子: 使用XtraBackup 备份MySQL数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表