1. 1MySQL的多实例:
  2. 多实例的特点:能够有效地利用服务器的资源,节约服务器的资源
  3. MySQL多实例的配置有两种,第一是使用一个配置文件,这种方法不推荐使用,容易出错;第二种是用多个配置文件,这种方法的好处是可以方便管理。
  4. [root@localhost 3308]# tree -L 2 /data/
  5. /data/
  6. ├── 3307
  7. ├── data
  8. ├── my.cnf
  9. ├── mysql
  10. ├── mysql_3307.err
  11. ├── mysqld.pid
  12. └── mysql.sock
  13. └── 3308
  14. ├── data
  15. ├── my.cnf
  16. ├── mysql
  17. ├── mysql_3308.err
  18. ├── mysqld.pid
  19. └── mysql.sock
  20.  
  21. 安装mysql
  22. 通过压缩包哦安装,提前下载mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz,解压即可。
  23. 添加mysql用户,
  24. useradd -s /sbin/nologin mysql
  25.  
  26. 将解压的文件移动到/usr/local并做软连接
  27. mv mysql-5.5.62-linux-glibc2.12-x86_64 /usr/local
  28. ln -s mysql-5.5.62-linux-glibc2.12-x86_64 /usr/local/mysql
  29.  
  30. 创建每个服务端口的data文件夹
  31. mkdir -p /data/{3307,3308}
  32.  
  33. 进行mysql初始化:
  34. ./scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/data/3307/data
  35. ./scripts/mysql_install_db --user=mysql --basedir=/application/mysql/ --datadir=/data/3308/data
  36.  
  37. 配置端口的配置文件my.cnf
  38. vim /data/3307/my.cnf
  39. vim /data/3308/my.cnf
  40. [3307/my.cnf]
  41. [client]
  42. port = 3307
  43. socket = /data/3307/mysql.sock
  44.  
  45. [mysql]
  46. no-auto-rehash
  47.  
  48. [mysqld]
  49. user = mysql
  50. port = 3307
  51. socket = /data/3307/mysql.sock
  52. basedir = /application/mysql
  53. datadir = /data/3307/data
  54. open_files_limit = 1024
  55. back_log = 600
  56. max_connections = 800
  57. max_connect_errors = 3000
  58. table_cache = 614
  59. external-locking = FALSE
  60. max_allowed_packet =8M
  61. sort_buffer_size = 1M
  62. join_buffer_size = 1M
  63. thread_cache_size = 100
  64. thread_concurrency = 2
  65. query_cache_size = 2M
  66. query_cache_limit = 1M
  67. query_cache_min_res_unit = 2k
  68. #default_table_type = InnoDB
  69. thread_stack = 192K
  70. #transaction_isolation = READ-COMMITTED
  71. tmp_table_size = 2M
  72. max_heap_table_size = 2M
  73. #long_query_time = 1
  74. #log_long_format
  75. #log-error = /data/3307/error.log
  76. #log-slow-queries = /data/3307/slow.log
  77. pid-file = /data/3307/mysql.pid
  78. #log-bin = /data/3307/mysql-bin
  79. relay-log = /data/3307/relay-bin
  80. relay-log-info-file = /data/3307/relay-log.info
  81. binlog_cache_size = 1M
  82. max_binlog_cache_size = 1M
  83. max_binlog_size = 2M
  84. expire_logs_days = 7
  85. key_buffer_size = 16M
  86. read_buffer_size = 1M
  87. read_rnd_buffer_size = 1M
  88. bulk_insert_buffer_size = 1M
  89. #myisam_sort_buffer_size = 1M
  90. #myisam_max_sort_file_size = 10G
  91. #myisam_max_extra_sort_file_size = 10G
  92. #myisam_repair_threads = 1
  93. #myisam_recover
  94.  
  95. lower_case_table_names = 1
  96. skip-name-resolve
  97. slave-skip-errors = 1032,1062
  98. replicate-ignore-db=mysql
  99.  
  100. server-id = 8
  101.  
  102. innodb_additional_mem_pool_size = 4M
  103. innodb_buffer_pool_size = 32M
  104. innodb_data_file_path = ibdata1:128M:autoextend
  105. innodb_file_io_threads = 4
  106. innodb_thread_concurrency = 8
  107. innodb_flush_log_at_trx_commit = 2
  108. innodb_log_buffer_size = 2M
  109. innodb_log_file_size = 4M
  110. innodb_log_files_in_group = 3
  111. innodb_max_dirty_pages_pct = 90
  112. innodb_lock_wait_timeout = 120
  113. innodb_file_per_table = 0
  114. [mysqldump]
  115. quick
  116. max_allowed_packet = 2M
  117.  
  118. [mysqld_safe]
  119. log-error=/data/3307/mysql_3307.err
  120. pid-file=/data/3307/mysqld.pid
  121. 3308的配置文件把3307改成3308
  122.  
  123. 配置各端口的启动文件
  124. vim /data/3307/mysql
  125. vim /data/3308/mysql
  126. [3307/mysql]
  127. #!/bin/bash
  128. # chkconfig: 2345 21 60
  129. # description: msyql start scripts
  130. port=3307
  131. user=root
  132. passwd=123456
  133. path=/application/mysql/bin
  134. #socket=/tmp/mysql.sock
  135. mysqlsock="/data/${port}/mysql.sock"
  136. function_start(){
  137. if [ -e $mysqlsock ];then
  138. echo "mysql already running..."
  139. else
  140. $path/mysqld_safe --defaults-file=/data/${port}/my.cnf &>/dev/null &
  141. [ $? -eq 0 ]&&{
  142. # . /etc/init.d/functions
  143. echo "mysql start success!!!"
  144. }
  145. fi
  146. }
  147.  
  148. function_stop(){
  149. if [ -e $mysqlsock ];then
  150. $path/mysqladmin -u$user -p$passwd -S $mysqlsock shutdown &>/dev/null &
  151. [ $? -eq 0 ]&& {
  152. # . /etc/init.d/functions
  153. echo "mysql stop success!!!"
  154. }||echo "mysql stop failed"
  155. else
  156. echo "mysql dont start"
  157. fi
  158. }
  159. function_restart(){
  160.  
  161. if [ -e $socket ];then
  162. function_stop
  163. sleep 2
  164. function_start
  165. else
  166. function_start
  167. fi
  168. }
  169. function_status(){
  170. [ -e $msyqlsock ]&& echo "MySQL IS RUNNING" || echo "MySQL IS DOWN"
  171. }
  172. case $1 in
  173. start)
  174. function_start
  175. ;;
  176. stop)
  177. function_stop
  178. ;;
  179. status)
  180. function_status
  181. ;;
  182. restart)
  183. function_restart
  184. ;;
  185. *)
  186. echo "USAGE |$0{start|stop|status|restart}"
  187. esac
  188. 3308的启动文件将port改成3308
  189.  
  190. 将/data多实例文件添加权限
  191. chown -R mysql.mysql /data/
  192.  
  193. 启动数据库
  194.  
  195. [root@localhost 3307]# mysqld_safe --defaults-file=/data/3307/my.cnf
  196. /data/3307/mysql start
  197.  
  198. 进入数据库
  199. [root@localhost ~]# mysql -S /data/3307/mysql.sock
  200. [root@localhost ~]# netstat -lntup
  201. Active Internet connections (only servers)
  202. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  203. tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 18787/mysqld
  204. tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 19506/mysqld
  205.  
  206. 2MySQL的主从复制
  207. MySQL数据库的主从复制方案,与使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借助第三方工具,而且,MySQL的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的binlog日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的SQL语句,重新应用到MySQL数据库中。
  208. 主从复制原理
  209. 1)在Slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制
  210. 2)此时,Slave服务器的I/O线程会通过在Master上已经授权的复制用户权限请求连接Master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
  211. 3Master服务器接收到来自Slave服务器的I/O线程的请求后,其上负责复制的I/O线程会根据Slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。
  212. 4)当Slave服务器的I/O线程获取到Master服务器上I/O线程发送的日志内容,日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(MySQL-relay-bin.xxxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新binlog日志时能够告诉Master服务器从新binlog日志的指定文件及位置开始请求新的binlog日志内容。
  213. 5Slave服务器端的SQL线程会实时检测本地Relay LogI/O线程新增加的日志内容,然后及时地把Relay Log文件中的内容解析成SQL语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。
  214. 开启主数据库的log-bin
  215. #在my.cnf文件里的[mysqld]下编辑:
  216. log-bin = /data/3306/mysql-bin
  217.  
  218. 测试log-bin是否开启:
  219. [root@localhost 3307]# mysql -u root -p -S /data/3306/mysql.sock
  220. Enter password:
  221. Welcome to the MySQL monitor. Commands end with ; or \g.
  222. Your MySQL connection id is 7
  223. Server version: 5.5.62 MySQL Community Server (GPL)
  224.  
  225. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  226.  
  227. Oracle is a registered trademark of Oracle Corporation and/or its
  228. affiliates. Other names may be trademarks of their respective
  229. owners.
  230.  
  231. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  232.  
  233. mysql> show variables like 'server_id';
  234. +---------------+-------+
  235. | Variable_name | Value |
  236. +---------------+-------+
  237. | server_id | 5 |
  238. +---------------+-------+
  239. 1 row in set (0.00 sec)
  240.  
  241. mysql> show variables like 'log_bin';
  242. +---------------+-------+
  243. | Variable_name | Value |
  244. +---------------+-------+
  245. | log_bin | ON |
  246. +---------------+-------+
  247. 1 row in set (0.00 sec)
  248.  
  249. 建立用于从库复制的账号yunjisuan
  250. mysql> grant replication slave on *.* to 'yunjisuan'@'10.6.29.154' identified by 'yunjisuan123';
  251. Query OK, 0 rows affected (0.01 sec)
  252. 刷新权限
  253. mysql> flush privileges;
  254. Query OK, 0 rows affected (0.00 sec)
  255. mysql> select user,host from mysql.user;
  256. +-----------+-----------------------+
  257. | user | host |
  258. +-----------+-----------------------+
  259. | root | 127.0.0.1 |
  260. | yunjisuan | 10.6.29.154 |
  261. | root | ::1 |
  262. | | localhost |
  263. | root | localhost |
  264. | | localhost.localdomain |
  265. | root | localhost.localdomain |
  266. +-----------+-----------------------+
  267. 7 rows in set (0.00 sec)
  268.  
  269. 备份主表
  270. [root@localhost ~]# mysqldump -uroot -p123456 -S /data/3306/mysql.sock --events -A -B | gzip >/server/backup/mysql_bak.$(date +%F).sql.gz
  271.  
  272. 查看从数据库的serverid
  273. [root@localhost ~]# egrep "server-id|log-bin" /data/3307/my.cnf
  274. #log-bin = /data/3307/mysql-bin
  275. server-id = 2
  276.  
  277. 查看从数据的状态
  278.  
  279. mysql> show variables like 'log_bin';
  280. +---------------+-------+
  281. | Variable_name | Value |
  282. +---------------+-------+
  283. | log_bin | OFF |
  284. +---------------+-------+
  285. 1 row in set (0.00 sec)
  286.  
  287. mysql> show variables like 'server_id';
  288. +---------------+-------+
  289. | Variable_name | Value |
  290. +---------------+-------+
  291. | server_id | 2 |
  292. +---------------+-------+
  293. 1 row in set (0.00 sec)
  294.  
  295. 解压主数据库备份文件
  296. [root@localhost backup]# gzip -d mysql_bak.2019-09-11.sql.gz
  297. 把数据还原到3307
  298. [root@localhost backup]# mysql -u root -p123456 -S /data/3307/mysql.sock <mysql_bak.2019-09-11.sql
  299.  
  300. 登录从库,配置复制参数
  301. mysql> show master status
  302. -> ;
  303. +------------------+----------+--------------+------------------+
  304. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  305. +------------------+----------+--------------+------------------+
  306. | mysql-bin.000002 | 107 | | |
  307. +------------------+----------+--------------+------------------+
  308. 1 row in set (0.00 sec)
  309. mysql> CHANGE MASTER TO MASTER_HOST='10.6.29.154',MASTER_PORT=3306,MASTER_USER='yunjisuan',MASTER_PASSWORD='yunjisuan123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=345;
  310. Query OK, 0 rows affected (0.01 sec)
  311.  
  312. 开启主从同步开关,并查看
  313. [root@localhost backup]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "start slave"
  314. [root@localhost backup]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show slave status\G"
  315. *************************** 1. row ***************************
  316. Slave_IO_State: Waiting for master to send event
  317. Master_Host: 10.6.29.154
  318. Master_User: yunjisuan
  319. Master_Port: 3306
  320. Connect_Retry: 60
  321. Master_Log_File: mysql-bin.000002
  322. Read_Master_Log_Pos: 107
  323. Relay_Log_File: relay-bin.000002
  324. Relay_Log_Pos: 253
  325. Relay_Master_Log_File: mysql-bin.000002
  326. Slave_IO_Running: Yes
  327. Slave_SQL_Running: Yes
  328. Replicate_Do_DB:
  329. Replicate_Ignore_DB: mysql
  330. Replicate_Do_Table:
  331. Replicate_Ignore_Table:
  332. Replicate_Wild_Do_Table:
  333. Replicate_Wild_Ignore_Table:
  334. Last_Errno: 0
  335. Last_Error:
  336. Skip_Counter: 0
  337. Exec_Master_Log_Pos: 107
  338. Relay_Log_Space: 403
  339. Until_Condition: None
  340. Until_Log_File:
  341. Until_Log_Pos: 0
  342. Master_SSL_Allowed: No
  343. Master_SSL_CA_File:
  344. Master_SSL_CA_Path:
  345. Master_SSL_Cert:
  346. Master_SSL_Cipher:
  347. Master_SSL_Key:
  348. Seconds_Behind_Master: 0
  349. Master_SSL_Verify_Server_Cert: No
  350. Last_IO_Errno: 0
  351. Last_IO_Error:
  352. Last_SQL_Errno: 0
  353. Last_SQL_Error:
  354. Replicate_Ignore_Server_Ids:
  355. Master_Server_Id: 5
  356. 1 row in set (0.00 sec)
  357.  
  358. 随后在主库创建数据库等,再到从库查看:
  359. [root@localhost backup]# mysql -uroot -p123456 -S /data/3306/mysql.sock -e "create database admin1;"
  360. [root@localhost backup]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show databases;"
  361. +--------------------+
  362. | Database |
  363. +--------------------+
  364. | information_schema |
  365. | admin1 |
  366. | mysql |
  367. | performance_schema |
  368. | test |
  369. +--------------------+
  370.  
  371. 这样就完成了mysql数据库的主从同步。

  

mysql数据库的多实例与主从同步。的更多相关文章

  1. MySQL多实例,主从同步

    由于背景原因,所做的主从同步还是要基于MySQL 5.1的版本,主从同步主要是一个数据库读写访问原来的数据库热度过大,需要做到使用从库对读分压. MySQL主从同步介绍     MySQL 支持单双向 ...

  2. redis多实例与主从同步及高级特性(数据过期机制,持久化存储)

    redis多实例 创建redis的存储目录 vim /usr/local/redis/conf/redis.conf #修改redis的配置文件 dir /data/redis/ #将存储路径配置修改 ...

  3. PHP连接局域网MYSQL数据库的简单实例

    PHP连接局域网MYSQL数据库的简单实例 [php] view plaincopy <?PHP /** * php连接mysql数据库 * by www.jbxue.com */ $conn= ...

  4. MySQL数据库入门多实例配置

    MySQL数据库入门——多实例配置 前面介绍了相关的基础命令操作,所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握 1.什么是多实例 多实例就是一台服务器上开启 ...

  5. mysql数据库备份,主从复制及半同步复制

    1.使用mysqldump备份数据库并通过备份及二进制日志还原数据(备份完后再写入数据,然后再删库) mysqldump -A --single-transaction -F --master-dat ...

  6. 使用percona-xtrabackup实现对线上zabbix监控系统数据库mariadb5.5.47的主从同步

    使用percona-xtrabackup实现对线上zabbix监控系统数据库的主从同步 业务背景: zabbix3.0.4是业务的主要监控,部署在一台单机中,为避免数据丢失先对其做数据主从同步,因主数 ...

  7. Mysql 数据库单机多实例部署手记

        最近的研发机器需要部署多个环境,包括数据库.为了管理方便考虑将mysql数据库进行隔离,即采用单机多实例部署的方式.找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单 ...

  8. PHP+mysql数据库简单分页实例-sql分页

    前几天冷月写了一篇博文<php基础编程-php连接mysql数据库-mysqli的简单使用>,很多小伙伴在学习后都知道了php与mysql数据库的连接,今天冷月分享一个简单的分页实例 首先 ...

  9. MySQL数据库入门——多实例配置

    前面介绍了相关的基础命令操作,所有的操作都是基于单实例的,mysql多实例在实际生产环境也是非常实用的,因为必须要掌握 1.什么是多实例 多实例就是一台服务器上开启多个不同的服务端口(默认3306), ...

随机推荐

  1. 转 How to Resolve ORA-16009: remote archive log destination must be a STANDBY

    ###sample A primary B STANDBY C STANDBY   问题A 库一直报错 ORA-16009: remote archive log destination must b ...

  2. build doris 0.11.5 on centos 7/ubuntu

    doris has envolved many thirdparty components since v0.9. so the build progress has changed a lot si ...

  3. PAT 甲级 1066 Root of AVL Tree (25 分)(快速掌握平衡二叉树的旋转,内含代码和注解)***

    1066 Root of AVL Tree (25 分)   An AVL tree is a self-balancing binary search tree. In an AVL tree, t ...

  4. PP篇9 更改计划订单

    首先看了下这个函数的版本  还挺新的 S4版本应该是有更新过,里面用了新语法 导入: PLANNEDORDER    计划订单号HEADERDATA          表头数据(来自外部系统) HEA ...

  5. spring 使用@Bean装配Bean

    通过@Component装配Bean,但是@Component只能注解在类上,不能注解到方法上.对于Java而言,大部分的开发都需要引入第三方的包(jar文件),而且往往并没有这些包的源码,这时候将无 ...

  6. FreeMarker的应用场景

      FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一 ...

  7. Python - Django - JsonResponse 对象

    用 json 模块和 HttpResponse 返回生成的 json views.py: from django.shortcuts import render, HttpResponse impor ...

  8. 代码内存泄露检测(1) MLeaksFinder (Wechat开源) + FBRetainCycleDetector (FaceBook开源)

    每次项目编译完成之后,都被内存搞得头昏脑胀,压力甚大. 利用两周时间,稍微研究了 微信开源的 MLeaksFinder 和 facebook 开源的 FBMemoryProfiler, 这两个开源三方 ...

  9. Linux如何查看进程、杀死进程、启动进程

    1.查看进程:ps命令 下面的命令还没实践,仅仅供你参考:可以用man ps查看格式,只不过是一个小工具而已! ps a 显示现行终端机下的所有程序,包括其他用户的程序.    ps -A 显示所有程 ...

  10. 创建一个用目录分层的Rust应用

    一:前言,这是Rust基础程序,主要是用来讲解怎么创建分层(类似Java package)的应用: 二:代码实现: 2.1在src下创建main.rs,然后声明main方法,代码如下: fn main ...