实战!MySQL主从复制一键搭建脚本分享

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 实战!MySQL主从复制一键搭建脚本分享

一、环境说明:

本次准备了两台机器搭建mysql主从复制。只需要安装好操作系统,挂载系统镜像和上传所需的安装包和脚本即可。另外,脚本部分位置需要修改IP地址。

操作系统版本 数据库版本 IP地址 主机名
centos7 8.0.33 192.168.59.249 db1
centos7 8.0.33 192.168.59.250 db2

网盘地址

  1. 链接: https://pan.baidu.com/s/1PUcGP0qSBphCfxCsFFhFSg
  2. 提取码: pvdv

上传安装包和脚本至任意目录下,赋予执行权限,执行mysql_ms_install.sh即可。整个过程中只需要输入数据库的版本号即可。

  1. [root@db1 ~]#sh -x mysql_ms_install.sh

二、安装过程部分截图:

三、脚本内容:

  1. [root@db1 ~]#cat mysql_ms_install.sh
  2. #!/bin/bash
  3. echo "-----------------------------开始MYSQL主从搭建--------------------------------------"
  4. start_time=$(date +%s)
  5. #关闭Selinux
  6. setenforce 0
  7. sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
  8. #关闭防火墙
  9. systemctl stop firewalld
  10. systemctl disable firewalld
  11. systemctl status firewalld
  12. #配置yum源
  13. cd /etc/yum.repos.d/
  14. rm -rf ./*
  15. cat >> /etc/yum.repos.d/centos.repo <<-EOF
  16. [centos]
  17. name=oracle
  18. baseurl=file:///mnt
  19. enabled=1
  20. gpgcheck=0
  21. EOF
  22. cd
  23. mount /dev/sr0 /mnt    
  24. yum clean all|wc -l
  25. yum makecache
  26. yum install expect* -y
  27. yum install wget -y
  28. #yum install gcc build-essential -y
  29. #tar -xvf sshpass.tar.gz
  30. #cd /root/sshpass-1.10
  31. #./configure
  32. #make
  33. #make install
  34.    os_name=${node_name}
  35.    if [[ "$os_name" =~ ^localhost ]];then
  36.        echo "ERROR: hostname: $os_name is invalid,pls check"
  37.        exit -1
  38.    else
  39.        echo "hostname check passed"
  40.        hostnamectl set-hostname ${node_name}db1
  41.    fi
  42. # 变量定义
  43. groupadd mysql
  44. useradd -r -g mysql mysql
  45. # 定义变量
  46. REMOTE_USER="root"
  47. REMOTE_HOST="192.168.59.250"
  48. PASSWORD="123123"
  49. # 本地生成SSH密钥对(如果不存在)
  50. if [ ! -f ~/.ssh/id_rsa ]; then
  51.    ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa
  52. fi
  53. # 使用Expect脚本将公钥复制到远程主机
  54. /usr/bin/expect <<EOF
  55. set timeout 10
  56. # 启动ssh-copy-id命令
  57. spawn ssh-copy-id $REMOTE_USER@$REMOTE_HOST
  58. # 处理首次连接提示的 "yes/no" 和密码输入
  59. expect {
  60.    "yes/no" { send "yes\r"; exp_continue }
  61.    "password:" { send "$PASSWORD\r" }
  62. }
  63. expect eof
  64. EOF
  65. # 验证是否成功
  66. ssh $REMOTE_USER@$REMOTE_HOST "echo '免密登录设置成功'"
  67. REMOTE_COMMANDS=$(cat << EOF
  68. echo "hostname:"
  69. os_name=${node_name}
  70.    if [[ "$os_name" =~ ^localhost ]];then
  71.        echo "ERROR: hostname: $os_name is invalid,pls check"
  72.        exit -1
  73.    else
  74.        echo " hostname check passed"
  75.        hostnamectl set-hostname ${node_name}db2
  76.    fi
  77. EOF
  78. )
  79. ssh $REMOTE_USER@$REMOTE_HOST "$REMOTE_COMMANDS"
  80. #添加主机名与IP对应记录
  81. public_ip1=$(hostname -I| grep -o -e '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n 1)
  82. node_name1=$(hostname)
  83. sleep 3
  84. public_ip2=$(ssh $REMOTE_USER@$REMOTE_HOST "hostname -I | grep -o -e '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' | head -n 1")
  85. node_name2=$(ssh $REMOTE_USER@$REMOTE_HOST "hostname")
  86. sleep 3
  87. echo -e "${public_ip1} ${node_name1}\n${public_ip2} ${node_name2}" >> /etc/hosts
  88. cat /etc/hosts
  89. cd ~
  90. echo "-----------------------------开始MYSQL MASTER安装--------------------------------------"
  91. start_time=$(date +%s)
  92. MYSQL_ROOT_PASSWORD="123456"
  93. REPLICA_USER="repl"
  94. REPLICA_PASSWORD="repl"
  95. echo -e "\e[31m***************一键安装mysql任何版本数据库******************\e[0m"
  96. echo -e "输入安装版本,如\e[31m8.0.27\e[0m"
  97. read version
  98. find / -name mysql | xargs rm -rf
  99. port=$(netstat -antup|grep mysql|wc -l)
  100. if [ $port != 0 ]
  101. then echo "mysql进程存在,请先杀掉进程"
  102. ps -ef |grep mysqld
  103. exit 1
  104. fi
  105. echo "-----------------创建所需目录及用户并上传安装包----------------------------"
  106. # 获取当前所在目录位置
  107. current_dir=$(pwd)
  108. echo "当前所在目录位置: $current_dir"
  109. # 目标路径
  110. target_dir="/opt"
  111. # 检查目标路径是否存在,如果不存在则创建
  112. if [ ! -d "$target_dir" ]; then
  113.    mkdir -p "$target_dir"
  114.    echo "已创建目录: $target_dir"
  115. fi
  116. # 移动当前目录下的所有文件到目标路径
  117. mv $current_dir/* $target_dir
  118. cp mysql_install.sh /opt
  119. echo "已将当前目录下所有文件移动至 $target_dir"
  120. mkdir -p  /data/mysql
  121. groupadd mysql
  122. useradd -r -g mysql mysql
  123. cd /opt/
  124. tar -xvf mysql-$version-linux-glibc2.12-x86_64.tar.xz
  125. mv mysql-$version-linux-glibc2.12-x86_64/  /usr/local/
  126. cd /usr/local/
  127. mv mysql-$version-linux-glibc2.12-x86_64/ mysql
  128. chown -R mysql.mysql /usr/local/mysql/
  129. echo "-----------------------------卸载原有的mysql组件--------------------------"
  130. yum list installed | grep mariadb
  131. yum -y remove mariadb* || true
  132. chown mysql:mysql -R /data/mysql
  133. touch /etc/my.cnf
  134. chmod 644 /etc/my.cnf
  135. MYSQL_ROOT_PASSWORD=123456
  136. cat <<EOF >/etc/my.cnf
  137. [client]
  138. port = 3306
  139. socket = /tmp/mysql.sock

  140. [mysql]
  141. default-character-set = utf8mb4

  142. [mysqld]
  143. user = mysql
  144. port = 3306
  145. basedir = /usr/local/mysql
  146. datadir = /data/mysql
  147. log-error=/data/mysql/mysql.err
  148. socket = /tmp/mysql.sock
  149. pid-file = /data/mysql/mysql.pid
  150. innodb_buffer_pool_size = 8G      # 配置为内存的75%
  151. innodb_buffer_pool_instances = 8   # 配置buffer_pool为8个
  152. innodb_log_file_size = 2G          # 调整日志文件大小
  153. innodb_log_buffer_size = 128M      # InnoDB用于写入磁盘日志文件的缓冲区大小
  154. innodb_flush_log_at_trx_commit = 1 # 保证数据安全
  155. innodb_file_per_table = 1          # 每张表独立表空间
  156. innodb_io_capacity = 2000          # I/O操作数
  157. innodb_read_io_threads = 4         # 读I/O线程
  158. innodb_write_io_threads = 4        # 写I/O线程
  159. innodb_flush_method = O_DIRECT     # 防止双写
  160. default_storage_engine = InnoDB    # 存储引擎默认InnoDB
  161. max_connections = 500              # 最大连接数
  162. max_connect_errors = 1000          # 最大错误连接次数
  163. skip_name_resolve = 1              # 只能用IP地址检查客户端的登录
  164. server-id = 1                       # 主库ID
  165. gtid_mode = ON                      # 启用GTID
  166. enforce-gtid-consistency = ON       # 强制GTID一致性
  167. log-bin = mysql-bin                 # 启用二进制日志
  168. binlog_format = ROW                 # 二进制日志格式
  169. binlog_row_image = FULL             # 行级日志模式
  170. master_info_repository = TABLE      # 主库信息表存储
  171. relay_log_info_repository = TABLE   # 中继日志信息表存储
  172. sync-binlog = 1                     # 保证数据安全
  173. log-slave-updates = 1               # 允许从库更新记录到binlog
  174. binlog_expire_logs_seconds = 604800 # binlog保留时间
  175. slave_parallel_workers = 4          # 从库并行复制线程数
  176. slave_parallel_type = LOGICAL_CLOCK # 并行复制类型
  177. table_open_cache = 4096             # 程打开的表的数量            
  178. table_definition_cache = 2048       # 可以存储在定义缓存中的表定义数量
  179. tmp_table_size = 128M               # 内部内存临时表大小
  180. max_heap_table_size = 256M          # 内部内存临时表的最大值
  181. thread_cache_size = 128             # 连接使用缓存线程
  182. open_files_limit = 65535            # mysqld进程能使用的最大文件描述(FD)符数量
  183. EOF
  184. echo "-----------------------------------初始化-----------------------------------"
  185. cd /usr/local/mysql/bin
  186. ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
  187. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  188. path=$(grep 'basedir' /etc/profile|wc -l)
  189. if [ $path !=  0 ]
  190.  then
  191.    echo -e "\e[31m MYSQL_HOME路径存在\e[0m"
  192.  else
  193.    echo "export basedir=/usr/local/mysql/bin" >> /etc/profile
  194.    echo "export PATH=\$PATH:\$basedir"        >> /etc/profile
  195.    source /etc/profile
  196. fi
  197. echo "---------------------------------启动MYSQL服务---------------------------------------"
  198. service mysql start
  199. echo 'export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib'>>/etc/profile
  200. sleep 3
  201. source /etc/profile
  202. cat /data/mysql/mysql.err|grep password
  203. chkconfig --add mysql
  204. chkconfig mysql on
  205. chkconfig --list mysql
  206. echo "-----------------------------恭喜!MYSQL 主库安装成功--------------------------------------"
  207. end_time=$(date +%s)
  208. execution_time=$((end_time - start_time))
  209. echo "脚本执行时间:${execution_time} 秒"
  210. MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.err`
  211. mysqladmin  -uroot -p${MYSQL_OLDPASSWORD} password ${MYSQL_ROOT_PASSWORD}
  212. mysql -uroot -p123456 -e "update mysql.user set host ='%' where user ='root';"
  213. mysql -uroot -p123456 -e "flush privileges;"
  214. mysql -uroot -p123456 << EOF
  215. exit
  216. EOF
  217. sleep 10
  218. #EOF
  219. #)
  220. #ssh $REMOTE_USER@$REMOTE_HOST "$REMOTE_COMMANDS1"
  221. echo "-----------------------------开始安装MYSQL SLAVE--------------------------------------"
  222. source /etc/profile
  223. scp /opt/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz mysql_install.sh root@192.168.59.250:/opt
  224. scp /opt/mysql_install.sh root@192.168.59.250:/opt/
  225. ssh -tt -p 22 root@192.168.59.250 "source /opt/mysql_install.sh"
  226. #REMOTE_USER="root"
  227. ln -fs /usr/local/mysql/bin/mysql /usr/bin/
  228. REMOTE_HOST="192.168.59.250"
  229. #REMOTE_SCRIPT_PATH="/opt/mysql_install.sh"
  230. #ssh 192.168.59.250 "source /opt/mysql_install.sh"
  231. ssh =$REMOTE_HOST <<EOF
  232. if [ $? -eq 0 ]; then
  233.    echo "MySQL 安装已成功完成."
  234. else
  235.    echo "MySQL 安装失败,请检查日志或手动排查问题."
  236. fi
  237. # 添加其他命令,如清理临时文件或重启服务
  238. # 例如: rm /tmp/temp_file
  239. exit
  240. EOF
  241. sleep 10
  242. /usr/bin/expect <<EOF
  243. set timeout 60
  244. # 启动SSH命令
  245. spawn ssh root@192.168.59.249
  246. # 处理首次连接提示的 "yes/no" 和密码输入
  247. expect {
  248.    "Are you sure you want to continue connecting (yes/no)?" { send "yes\r"; exp_continue }
  249.    "password:" { send "123123\r"; exp_continue }
  250.    eof
  251. }
  252. EOF
  253. sleep 10
  254. source /etc/profile
  255. ln -fs /usr/local/mysql/bin/mysql /usr/bin/
  256. MASTER_IP=192.168.59.249
  257. SLAVE_IP=192.168.59.250
  258. # 配置主服务器
  259. function configure_master {
  260. REMOTE_USER="root"
  261. REMOTE_HOST="192.168.59.249"
  262. MYSQL_ROOT_PASSWORD="123456"
  263. REPLICA_USER="repl"
  264. REPLICA_PASSWORD="repl"
  265. SSH_PASSWORD="123123"
  266. /usr/bin/expect <<EOF
  267. set timeout -1
  268. set REMOTE_USER "root"
  269. set REMOTE_HOST "192.168.59.249"
  270. set MYSQL_ROOT_PASSWORD "123456"
  271. set REPLICA_USER "repl1"
  272. set REPLICA_PASSWORD "repl"
  273. set SSH_PASSWORD "123123"
  274. spawn mysql -u$REMOTE_USER -p$MYSQL_ROOT_PASSWORD -h$REMOTE_HOST -e "DROP USER IF EXISTS '$REPLICA_USER'@'%'; CREATE USER '$REPLICA_USER'@'%' IDENTIFIED BY '$REPLICA_PASSWORD'; USE mysql; GRANT REPLICATION SLAVE ON *.* TO '$REPLICA_USER'@'%'; FLUSH PRIVILEGES; SHOW MASTER STATUS;"
  275. set output ""
  276. expect {
  277.    "*password:" {
  278.        send "$MYSQL_ROOT_PASSWORD\r"
  279.        exp_continue
  280.    }
  281.    eof {
  282.        append output $expect_out(buffer)
  283.    }
  284. }
  285. puts "Complete Output:\n$output\n"
  286. set master_status [split $output "\n"]
  287. puts "DEBUG: Master Status List:\n$master_status\n"  ; # 添加调试信息,查看分割后的列表
  288. set file ""
  289. set position ""
  290. foreach line $master_status {
  291.    if {[regexp {\| (\S+) \| (\d+) \|} $line -> file_temp position_temp]} {
  292.        set file $file_temp
  293.        set position $position_temp
  294.        break
  295.    }
  296. }
  297. puts "FILE: $file"
  298. puts "POSITION: $position"
  299. EOF
  300. REMOTE_USER="root"
  301. REMOTE_HOST="192.168.59.249"
  302. MYSQL_ROOT_PASSWORD="123456"
  303. OUTPUT_FILE="/opt/output.txt"
  304. output=$(mysql -u"$REMOTE_USER" -p"$MYSQL_ROOT_PASSWORD" -h"$REMOTE_HOST" -e "SHOW MASTER STATUS\G")
  305. echo "$output" > "$OUTPUT_FILE"
  306. file=$(echo "$output" | grep "File:" | awk '{print $2}')
  307. position=$(echo "$output" | grep "Position:" | awk '{print $2}')
  308. echo "FILE: $file"
  309. echo "POSITION: $position"
  310. scp /opt/output.txt 192.168.59.250:/opt
  311. file=$(cat "/opt/output.txt" | grep "File:" | awk '{print $2}')
  312. position=$(cat "/opt/output.txt" | grep "Position:" | awk '{print $2}')
  313. export FILE="$file"
  314. export POSITION="$position"
  315. }
  316. # 配置从服务器
  317. function configure_slave {
  318. file=$(cat "/opt/output.txt" | grep "File:" | awk '{print $2}')
  319. position=$(cat "/opt/output.txt" | grep "Position:" | awk '{print $2}')
  320. export FILE="$file"
  321. export POSITION="$position"
  322. REMOTE_USER="root"
  323. REMOTE_HOST="192.168.59.250"
  324. MYSQL_ROOT_PASSWORD="123456"
  325. REPLICA_USER="repl"
  326. REPLICA_PASSWORD="repl"
  327. SSH_PASSWORD="123123"
  328. MASTER_HOST="192.168.59.249"
  329. /usr/bin/expect <<EOF
  330. set timeout -1
  331. set REMOTE_USER "root"
  332. set REMOTE_HOST "192.168.59.250"
  333. set MASTER_IP "192.168.59.249"
  334. set MYSQL_ROOT_PASSWORD "123456"
  335. set REPLICA_USER "repl"
  336. set REPLICA_PASSWORD "repl"
  337. set SSH_PASSWORD "123123"
  338. spawn mysql -u$REMOTE_USER -p$MYSQL_ROOT_PASSWORD -h192.168.59.250 -e "CHANGE MASTER TO MASTER_HOST='192.168.59.249', MASTER_USER='$REPLICA_USER', MASTER_PASSWORD='$REPLICA_PASSWORD', MASTER_LOG_FILE='$FILE', MASTER_LOG_POS=$POSITION;CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1;START SLAVE;"
  339. expect {
  340.    "*password:" {
  341.        send "$MYSQL_ROOT_PASSWORD\r"
  342.        exp_continue
  343.    }
  344.    eof
  345. }
  346. #puts "\nSlave Status:\n$slave_output"
  347. set show_slave_status_cmd "mysql -u$REMOTE_USER -p$MYSQL_ROOT_PASSWORD -h$REMOTE_HOST -e \"SHOW SLAVE STATUS\\\\G\""
  348. spawn sh -c $show_slave_status_cmd
  349. expect {
  350.    "*password:" {
  351.        send "$MYSQL_ROOT_PASSWORD\r"
  352.        exp_continue
  353.    }
  354.    eof {
  355.        set slave_output $expect_out(buffer)
  356.        puts "SHOW SLAVE STATUS completed."
  357.    }
  358. }
  359. puts "\nSlave Status:\n$slave_output"
  360. EOF
  361. configure_master
  362. configure_slave

此脚本为mysql从库安装脚本:

  1. cat mysql_install.sh
  2. #!/bin/bash
  3. echo "-----------------------------开始MYSQL SLAVE安装--------------------------------------"
  4. #关闭Selinux
  5. setenforce 0
  6. sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
  7. #关闭防火墙
  8. systemctl stop firewalld
  9. systemctl disable firewalld
  10. systemctl status firewalld
  11. #配置yum源
  12. cd /etc/yum.repos.d/
  13. rm -rf ./*
  14. cat >> /etc/yum.repos.d/centos.repo <<-EOF
  15. [centos]
  16. name=oracle
  17. baseurl=file:///mnt
  18. enabled=1
  19. gpgcheck=0
  20. EOF
  21. cd
  22. mount /dev/sr0 /mnt    
  23. yum clean all|wc -l
  24. yum makecache
  25. yum install expect* telent* -y
  26. start_time=$(date +%s)
  27. echo -e "\e[31m***************一键安装mysql任何版本数据库******************\e[0m"
  28. echo -e "输入安装版本,如\e[31m8.0.27\e[0m"
  29. read version
  30. find / -name mysql | xargs rm -rf
  31. port=$(netstat -antup|grep mysql|wc -l)
  32. if [ $port != 0 ]
  33. then echo "mysql进程存在,请先杀掉进程"
  34. ps -ef |grep mysqld
  35. exit 1
  36. fi
  37. echo "-----------------创建所需目录及用户并上传安装包----------------------------"
  38. # 获取当前所在目录位置
  39. current_dir=$(pwd)
  40. echo "当前所在目录位置: $current_dir"
  41. # 目标路径
  42. target_dir="/opt"
  43. # 检查目标路径是否存在,如果不存在则创建
  44. if [ ! -d "$target_dir" ]; then
  45.    mkdir -p "$target_dir"
  46.    echo "已创建目录: $target_dir"
  47. fi
  48. # 移动当前目录下的所有文件到目标路径
  49. mv $current_dir/* $target_dir
  50. echo "已将当前目录下所有文件移动至 $target_dir"
  51. mkdir -p  /data/mysql
  52. groupadd mysql
  53. useradd -r -g mysql mysql
  54. cd /opt/
  55. tar -xvf mysql-$version-linux-glibc2.12-x86_64.tar.xz
  56. mv mysql-$version-linux-glibc2.12-x86_64/  /usr/local/
  57. cd /usr/local/
  58. mv mysql-$version-linux-glibc2.12-x86_64/ mysql
  59. chown -R mysql.mysql /usr/local/mysql/
  60. echo "-----------------------------卸载原有的mysql组件--------------------------"
  61. yum list installed | grep mariadb
  62. yum remove mariadb* -y || true
  63. chown mysql:mysql -R /data/mysql
  64. touch /etc/my.cnf
  65. chmod 644 /etc/my.cnf
  66. MYSQL_ROOT_PASSWORD=123456
  67. cat <<EOF >/etc/my.cnf
  68. [client]
  69. port = 3306
  70. socket = /tmp/mysql.sock
  71. [mysql]
  72. default-character-set = utf8mb4
  73. [mysqld]
  74. user = mysql
  75. port = 3306
  76. basedir = /usr/local/mysql
  77. datadir = /data/mysql
  78. log-error=/data/mysql/mysql.err
  79. socket = /tmp/mysql.sock
  80. pid-file = /data/mysql/mysql.pid

  81. # 性能优化
  82. innodb_buffer_pool_size = 8G      # 配置为内存的75%
  83. innodb_buffer_pool_instances = 8   # 配置buffer_pool为8个
  84. innodb_log_file_size = 2G          # 调整日志文件大小
  85. innodb_log_buffer_size = 128M      # InnoDB用于写入磁盘日志文件的缓冲区大小
  86. innodb_flush_log_at_trx_commit = 1 # 保证数据安全
  87. innodb_file_per_table = 1          # 每张表独立表空间
  88. innodb_io_capacity = 2000          # I/O操作数
  89. innodb_read_io_threads = 4         # 读I/O线程
  90. innodb_write_io_threads = 4        # 写I/O线程
  91. innodb_flush_method = O_DIRECT     # 防止双写
  92. default_storage_engine = InnoDB    # 存储引擎默认InnoDB

  93. # 连接优化
  94. max_connections = 500              # 最大连接数
  95. max_connect_errors = 1000          # 最大错误连接次数
  96. skip_name_resolve = 1              # 只能用IP地址检查客户端的登录

  97. # 复制配置
  98. server-id = 2                      # 从库ID
  99. gtid_mode = ON                      # 启用GTID
  100. enforce-gtid-consistency = ON       # 强制GTID一致性
  101. log-bin = mysql-bin                 # 启用二进制日志
  102. binlog_format = ROW                 # 二进制日志格式
  103. binlog_row_image = FULL             # 行级日志模式
  104. master_info_repository = TABLE      # 主库信息表存储
  105. relay_log_info_repository = TABLE   # 中继日志信息表存储
  106. sync-binlog = 1                     # 保证数据安全
  107. log-slave-updates = 1               # 允许从库更新记录到binlog
  108. binlog_expire_logs_seconds = 604800 # binlog保留时间

  109. # 多线程复制
  110. slave_parallel_workers = 4          # 从库并行复制线程数
  111. slave_parallel_type = LOGICAL_CLOCK # 并行复制类型

  112. # 缓存优化
  113. table_open_cache = 4096             # 程打开的表的数量            
  114. table_definition_cache = 2048       # 可以存储在定义缓存中的表定义数量
  115. tmp_table_size = 128M               # 内部内存临时表大小
  116. max_heap_table_size = 256M          # 内部内存临时表的最大值
  117. thread_cache_size = 128             # 连接使用缓存线程
  118. open_files_limit = 65535            # mysqld进程能使用的最大文件描述(FD)符数量
  119. EOF
  120. echo "-----------------------------------初始化-----------------------------------"
  121. cd /usr/local/mysql/bin
  122. ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
  123. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  124. path=$(grep 'basedir' /etc/profile|wc -l)
  125. if [ $path !=  0 ]
  126.  then
  127.    echo -e "\e[31m MYSQL_HOME路径存在\e[0m"
  128.  else
  129.    echo "export basedir=/usr/local/mysql/bin" >> /etc/profile
  130.    echo "export PATH=\$PATH:\$basedir"        >> /etc/profile
  131.    source /etc/profile
  132. fi
  133. echo "---------------------------------启动MYSQL服务---------------------------------------"
  134. service mysql start
  135. echo 'export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib'>>/etc/profile
  136. sleep 3
  137. source /etc/profile
  138. cat /data/mysql/mysql.err|grep password
  139. chkconfig --add mysql
  140. chkconfig mysql on
  141. chkconfig --list mysql
  142. ln -fs /usr/local/mysql/bin/mysql /usr/bin/
  143. echo "-----------------------------恭喜!MYSQL 从库安装成功--------------------------------------"
  144. end_time=$(date +%s)
  145. execution_time=$((end_time - start_time))
  146. echo "脚本执行时间:${execution_time} 秒"
  147. MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.err`
  148. mysqladmin  -uroot -p${MYSQL_OLDPASSWORD} password ${MYSQL_ROOT_PASSWORD}
  149. mysql -uroot -p123456 -e "update mysql.user set host ='%' where user ='root';"
  150. mysql -uroot -p123456 -e "flush privileges;"
  151. mysql -uroot -p123456 << EOF
  152. exit
  153. EOF
  154. sleep 10

特别说明:此脚本为1.0版本,还有很多问题,希望大家多提意见,我们继续优化迭代。另外,要感谢国内知名MySQL数据库架构师李伟的鼎力支持,后续我们还会继续合作分享MySQL相关干货。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
26 2
zabbix agent集成percona监控MySQL的插件实战案例
|
1天前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
18天前
|
SQL 关系型数据库 MySQL
干货!python与MySQL数据库的交互实战
干货!python与MySQL数据库的交互实战
|
20天前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
46 0
|
21天前
|
关系型数据库 MySQL Shell
MySQL数据库一键安装脚本,适合任何版本
MySQL数据库一键安装脚本,适合任何版本
29 2
|
21天前
|
关系型数据库 MySQL 网络安全
全网首例!MySQL8 MGR多主一键搭建脚本分享
全网首例!MySQL8 MGR多主一键搭建脚本分享
20 1
|
20天前
|
关系型数据库 MySQL 网络安全
MySQL主从复制详细教程
配置MySQL的主从复制是一个细致的过程,需要仔细遵循上述步骤进行。一旦配置完成并运行正常,主从复制将大大提高数据库的可用性和读写性能。在操作过程中,务必保持谨慎,确保数据的一致性和安全性。
67 0
|
18天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~