Jekyll2023-12-19T00:22:37+08:00https://www.046569.com/feed.xml046569’s blog奏响人文与技术的交响乐.046569046569@046569.com2.5G 网络升级指南2023-12-18T22:27:04+08:002023-12-18T22:27:04+08:00https://www.046569.com/2023/12/18/2.5G-network-upgrade-guide<p>前些日子把网络升级到了 2500M,涉及到一些细节,记录下来方便后来人.</p>
<h3 id="为啥要升级-25g而不是一步到位上-10g万兆">为啥要升级 2.5G,而不是一步到位上 10G(万兆)?</h3>
<ol>
<li>有些设备没有合适的万兆网卡或者需要用光口进行转换.</li>
<li>超过了一般机械硬盘的速度,像 NAS 类似的设备也需要改造成全闪存,成本较高.</li>
<li>当前时间节点, 2.5G 的路由器、交换机、网卡的价格更低,不足千元即可完成升级,总体成本可控.</li>
<li>墙内的布线可复用,无需改造.</li>
</ol>
<h3 id="硬件准备">硬件准备</h3>
<ol>
<li>2.5G 网口路由器.若路由器仅有一个 2.5G 接口,还需要准备 2.5G 交换机.路由器、8个口的交换机都是三百多元.</li>
<li>超五类(cat 5e)及以上的网线.对,你没看错,<strong>8 根全通</strong>的超五类即可满足需求.</li>
<li>若机器无支持的网卡,可用外置网卡.约一百元.</li>
</ol>
<h3 id="macos-平台">macOS 平台</h3>
<p>Mac Studio 自带 10G 网口,配置一下就可以用了.</p>
<p>设置–网络–以太网–硬件:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>配置: 手动
速度: 2500Base-T
双工: 全双工
MTU: 特大(9000)
</code></pre></div></div>
<p>注意务必<strong>开启巨型帧</strong>(MTU那行配置,否则跑不满带宽).服务顺序”以太网”要在”Wi-Fi”的前面.另外配置设置成自动时,会<em>间歇性丢包</em>,原因不明.被这个问题坑哭了.</p>
<p>测速情况:</p>
<p><img src="/assets/media/mac_speed.png" alt="macOS speedtest via iperf3" /></p>
<h3 id="windows-平台">Windows 平台</h3>
<p>我的 2nd 奶机是一台拯救者刃(没 DIY 才不是因为挖矿潮),自带供电保守的 CPU、开超频就蓝屏的显卡、刷 BIOS 会变砖的主板、比无线带宽还低的千兆有线网卡、扩容就降频的内存、安装费劲的硬盘位、玻璃脆的侧透面板、同心度约等于无的风扇和给力的售后小哥.不得不搞一个外置网卡,插上,安装 Realtek 的官方驱动(能找到算你厉害),找不到去找网卡厂商要 OEM 驱动,然后改 <code class="language-plaintext highlighter-rouge">MTU</code> .都玩 Windows 了,这点动手能力肯定要有的吧…提示一下:设备管理器里的高级选项卡.</p>
<p>需要注意:</p>
<p><strong>黑色不带<code class="language-plaintext highlighter-rouge">SS</code>标识的 USB 是 2.0</strong>,一定要找黑色带标识的或者蓝色插口的.</p>
<p>另外鄙视联想都 2023 年了,9 个 USB 接口竟然有 4 个是 2.0 的.如果测速只能跑到 300 - 400M 说明插错洞了!</p>
<p>同样使用<code class="language-plaintext highlighter-rouge">iperf3</code>测速:</p>
<p><img src="/assets/media/windows_speed.png" alt="Windows speedtest via iperf3" /></p>
<h3 id="linux群晖-nas-平台">Linux(群晖 NAS) 平台</h3>
<p>群晖有点麻烦,一般都没有内置 2.5G 网卡,需要外接.瞅瞅人家威联通!比如我的<code class="language-plaintext highlighter-rouge">DS918+</code>,建议使用<strong>RTL8156BG</strong>的网卡,并且安装在前置 USB3 接口.当然你也可以选择其它<code class="language-plaintext highlighter-rouge">RTL8156</code>芯片的网卡.功耗、发热高一点,一样用.新芯片,更快乐.我搞了一个带供电的 USB Hub,不知道能不能用,待测试.</p>
<p>插好后安<a href="https://github.com/bb-qq/r8152">驱动</a>吧.按照说明操作即可,注意<em>不支持即插即用</em>,需要<strong>重启</strong>才能识别网卡.</p>
<p>同样建议开启巨型帧,可提升文件服务器性能(尤其是 SMB ):
控制面板–网络–网络界面–局域网–编辑</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>手动设置 MTU 值: 9000
</code></pre></div></div>
<p>稳妥起见,建议再次重启.</p>
<p>接着在终端安装”Diagnosis Tool”,包含了很多有用工具:</p>
<p><code class="language-plaintext highlighter-rouge">sudo synogear install</code></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>autojump
autojump_match.py
cifsiostat
domain_test.sh
file
fix_idmap.sh
iftop
iostat
iotop
iperf
iperf3
log-analyzer.sh
lsof
mpstat
ncat
nethogs
nmap
nping
perf-check.py
pidstat
sa1
sa2
sadc
sadf
sar
sid2ugid.sh
sockstat
speedtest-cli.py
sysstat
tcpdump
tcpdump_wrapper
tmux
update_check.py
zblacklist
zmap
ztee
</code></pre></div></div>
<p>继续测速:
<img src="/assets/media/nas_speed.png" alt="Synology NAS speedtest via iperf3" /></p>
<h3 id="路由器--交换机">路由器 + 交换机</h3>
<p>对于单口 2.5G 路由器,一定看清楚哪个接口是 2.5G 的,别接错了.如果是新的全 2.5G 接口的路由器就没这种烦恼.</p>
<h3 id="文件对拷速度">文件对拷速度</h3>
<p><img src="/assets/media/copy_speed.png" alt="copy file speedtest" /></p>
<h3 id="为什么要升级">为什么要升级</h3>
<p>金钱不是花掉了就没了,而是换一种方式陪伴在你身边.取悦自己,放过家人.ORZ.</p>046569046569@046569.com前些日子把网络升级到了 2500M,涉及到一些细节,记录下来方便后来人.在 macOS 上安装 ChatGLM2-6B2023-06-29T23:39:00+08:002023-06-29T23:39:00+08:00https://www.046569.com/2023/06/29/install-chatglm2-6b-on-macos%20copy<p><a href="https://github.com/THUDM/ChatGLM2-6B">ChatGLM<strong>2</strong>-6B</a> 是开源中英双语对话模型 <a href="https://github.com/THUDM/ChatGLM-6B">ChatGLM-6B</a> 的第二代版本,可单机部署。本文记录下要注意的点。</p>
<ol>
<li>安装 MPS 。PyTorch 使用新的 Metal Performance Shaders 进行加速,可显著提升训练速度。安装可参考 <a href="https://developer.apple.com/metal/pytorch/">Apple</a> 的说明。</li>
<li>建议手动下载完整的模型实现,地址在 <a href="https://huggingface.co/THUDM/chatglm2-6b/tree/main">huggingface</a> 。其中类似<code class="language-plaintext highlighter-rouge">pytorch_model-00001-of-00007.bin</code>。</li>
<li>修改代码支持本地加载模型。如项目中的<code class="language-plaintext highlighter-rouge">web_demo.py</code>,参考如下:</li>
</ol>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># No.5 "../chatglm2-6b-models/chatglm2-6b" 修改为你本地的模型路径
</span><span class="n">tokenizer</span> <span class="o">=</span> <span class="n">AutoTokenizer</span><span class="p">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="s">"../chatglm2-6b-models/chatglm2-6b"</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="c1"># No.6 同上
</span><span class="n">model</span> <span class="o">=</span> <span class="n">AutoModel</span><span class="p">.</span><span class="n">from_pretrained</span><span class="p">(</span><span class="s">"../chatglm2-6b-models/chatglm2-6b/"</span><span class="p">,</span> <span class="n">trust_remote_code</span><span class="o">=</span><span class="bp">True</span><span class="p">).</span><span class="n">to</span><span class="p">(</span><span class="s">'mps'</span><span class="p">)</span>
<span class="c1"># No.107 建议增加 server_name 以支持内外网其它客户端
</span><span class="n">demo</span><span class="p">.</span><span class="n">queue</span><span class="p">().</span><span class="n">launch</span><span class="p">(</span><span class="n">share</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">inbrowser</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">server_name</span><span class="o">=</span><span class="s">'0.0.0.0'</span><span class="p">)</span>
</code></pre></div></div>
<p>实测 M1 Max + 32G 统一内存 可顺利运行。</p>
<p><img src="/assets/media/chatglm2.jpg" alt="ChatGLM2" /></p>046569046569@046569.comChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,可单机部署。本文记录下要注意的点。迁移到 Apple Silicon M1 Max 踩坑记录2022-03-21T21:57:00+08:002022-03-21T21:57:00+08:00https://www.046569.com/2022/03/21/migrate-to-Apple-Silicon-M1-Max<p>足足等了五年,终于等到 27 寸 iMac 产品线更换模具了。Studio Display + Mac Studio 诱惑十足,唯一的问题是:略贵。</p>
<p>平心而论,以 M1 系列芯片提供的性能与能耗比,真的非常超值。但疫情肆虐,迟迟看不到结束的迹象,收入锐减还得养家糊口,无疑是很慌的。所以只能放弃心水的 M1 ULTRA ,选择 M1 Max。希望疫情早日结束,神州大地国泰民安。</p>
<h3 id="迁移过程">迁移过程</h3>
<ol>
<li>使用时间机器迁移数据,拿出尘封的雷雳 3 数据线,直连。这是近十年难得一次迁移就成功的幸运经历。时间机器 + 迁移助理堪称双坑组合,以往无论你是使用Wi-Fi、有线网络还是雷雳线,该失败还是失败。可喜可贺!</li>
<li>系统设置中文件保险箱已经被关闭,需要手动开启。UPS 设置被还原,记得重新设置。若搜索文件出现延迟,请重建索引。修改主机名。修改 IP 地址。</li>
<li>通过 App Store 安装的程序都是通用种类。也就是说,直接就可以在 M1 上运行。无感,点赞。</li>
<li>安装 Rosetta 。Apple 的转译程序成熟度超高,👍。</li>
<li>通过 brew 管理的程序可以通过 <code class="language-plaintext highlighter-rouge">brew bundle dump</code> 和 <code class="language-plaintext highlighter-rouge">brew bundle install</code> 方便的进行备份和恢复。在新机器安装前应该使用 <a href="https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh">uninstall.sh</a> 脚本拆卸 Intel 版本的包。指令参考如下:<code class="language-plaintext highlighter-rouge">sudo ./uninstall.sh --path=/usr/local</code> 。残留的目录可手动删除。</li>
<li>编译安装的软件如 Ruby、Ruby on Rails 都要重新编译。仔细检查开发环境是否有奇怪的问题。</li>
<li>转移各种软件授权。</li>
<li>虚拟机?再买台 Windows 电脑吧!</li>
</ol>
<h3 id="总结">总结</h3>
<p>从整个过程来看,迁移较顺利。经过近两年的适配,ARM 生态醇熟。唯一的问题是:这套丐版也要近三万的造梦引擎套装,没有标配键鼠。对,你没看错。如果你喜欢那个带有触控 ID 和数字小键盘的妙控键盘要额外准备 RMB 1399 ,妙控板 RMB 1049 ,至于妙控鼠标,咋定价都行,那玩意儿没什么人用吧!</p>046569046569@046569.com足足等了五年,终于等到 27 寸 iMac 产品线更换模具了。Studio Display + Mac Studio 诱惑十足,唯一的问题是:略贵。使用外置固态硬盘加速配备了混合硬盘的 iMac2020-06-19T23:00:00+08:002020-06-19T23:00:00+08:00https://www.046569.com/2020/06/19/Use-an-external-PSSD-to-speed-up-imac-equipped-with-Fusion-Drive<p>如果问苹果台式机的第一大槽点,肯定是默认配备了混合硬盘,让本来就”买屏幕送电脑”的 iMac 性能雪上加霜.这次要升级的是两台 2017 年 iMac .</p>
<ol>
<li>21.5吋 4K屏 / 8G 内存( 4 + 4 )</li>
<li>27吋 5K屏 / 24G 内存( 8 + 8 + 4 + 4 )</li>
</ol>
<h3 id="比较升级方案">比较升级方案</h3>
<ol>
<li>SATA 接口的 SSD (如 Samsung 860 evo 500G 约 500 元) + 天才吧手工费(自己拆卸易损坏,官方授权服务商为 400 元) = 900 元.</li>
<li>Type-C 接口的 PSSD (如 Samsung T5 500G 约 500 元).高端一点可采用 T7(约 800 元) .再奢侈还可以使用雷雳接口的 X5 (约 1800 元).</li>
</ol>
<p>方案一服务商不接受邮寄,需要搬机器且拆机,麻烦.所以采用方案二.</p>
<h3 id="升级步骤">升级步骤</h3>
<ol>
<li>下载 Samsung Portable SSD Software for Mac ,升级固件.三星使用亚马逊云,国内下载速度缓慢,可错过高峰期选择清晨时段下载或采取特别姿势.</li>
<li>在磁盘工具的菜单栏选择”显示” => “显示所有设备”,进行格式化,使用 APFS 分区,并选择 GUID 分区图.</li>
<li>CMD + option + R 重装系统( macOS 10.15 中搭载的 APFS 文件系统存在一个 bug,会导致使用时间机器迁移的系统无法正确启动,所以这里采用重装 + 迁移的方式).</li>
<li>使用迁移助理迁移全部数据,来源选本地硬盘.</li>
<li>系统偏好中修改启动磁盘为新硬盘.</li>
<li>建议在节能设置中勾选”当显示器关闭时,防止电脑自动进入睡眠”,可解决系统睡眠后唤醒过慢的问题.</li>
</ol>
<h3 id="写在最后">写在最后</h3>
<p>我经过一段时间的尝试,和全闪存机器比较,日常使用主观感受差异不大.三星移动硬盘温控优秀,未见掉速和过热情况,所以分享给大家.</p>
<p>也希望 Apple 能慎重考虑: 2020 年了,为台式机标配全固态吧!</p>046569046569@046569.com如果问苹果台式机的第一大槽点,肯定是默认配备了混合硬盘,让本来就”买屏幕送电脑”的 iMac 性能雪上加霜.这次要升级的是两台 2017 年 iMac .白色恋人和黑天鹅向日葵2020-05-13T16:17:00+08:002020-05-13T16:17:00+08:00https://www.046569.com/2020/05/13/white-lover-and-black-swan-sunflower<p>原来向日葵也有黑色和白色的.</p>
<p><img src="/assets/media/white_lover_sunflower_thumb.jpg" alt="white lover sunflower" /></p>
<p><a href="/assets/media/white_lover_sunflower.jpeg" title="白色恋人向日葵">点击这里查看原图( 11.6 M )</a></p>
<p><img src="/assets/media/black_swan_sunflower_thumb.jpg" alt="white lover sunflower" /></p>
<p><a href="/assets/media/black_swan_sunflower.jpeg" title="黑天鹅向日葵">点击这里查看原图( 11.8 M )</a></p>046569046569@046569.com原来向日葵也有黑色和白色的.吊灯2019-07-12T23:19:00+08:002019-07-12T23:19:00+08:00https://www.046569.com/2019/07/12/ceiling-light<p>如同化学分子式一般的吊灯.</p>
<p><img src="/assets/media/ceiling_light_thumb.jpg" alt="ceiling light" /></p>
<p><a href="/assets/media/ceiling_light.JPG" title="吊灯">点击这里查看原图( 8.4 M )</a></p>046569046569@046569.com如同化学分子式一般的吊灯.自行托管 GitLab 以代替群晖套件中心中的套件2018-09-28T08:01:00+08:002018-09-28T08:01:00+08:00https://www.046569.com/2018/09/28/host-your-own-gitlab-instances-instead-of-using-the-synology-software-center<p>之前说坑爹的群晖存在自动升级迁移数据失败的问题并给出了<a href="/2018/07/15/fix-synology-gitlab-upgrade-failed.html">解决方案.</a>.这段时间陆陆续续也有一些朋友联系我说遇到相同的问题.考虑到群晖的实际技术实力,遂决定自行托管,放弃套件中心中的套件.</p>
<h3 id="自行托管的好处">自行托管的好处</h3>
<ol>
<li>性能更强劲.众所周知,群晖的硬件配置非常低,而 GitLab 又是重型应用程序.即便是旗舰机型也会经常遇到 503 的情况.</li>
<li>升级更简单.为虚拟机打个快照,执行官方升级程序,搞定收工.</li>
<li>数据更安全.不必使用非官方的迁移脚本,不必使用官方不推荐的数据库.</li>
</ol>
<h3 id="托管方式的选择">托管方式的选择</h3>
<ol>
<li>服务器,稳定不折腾,视各位体质点数对钱包君会造成一定程度的暴击.</li>
<li>家里的数据中心服务器或者长时间开机的电脑.我选择了这种,可以获得非常快速的访问体验(穷).</li>
</ol>
<h3 id="安装-gitlab-详细流程">安装 GitLab 详细流程</h3>
<h4 id="安装-debian-9stretch-操作系统">安装 Debian 9(stretch) 操作系统</h4>
<ol>
<li>由于 GitLab 要使用较多内存,所以使用 64 位镜像.截至发文时,官网的文件名为<code class="language-plaintext highlighter-rouge">debian-9.5.0-amd64-netinst.iso</code>.</li>
<li>我设置了 4G 内存和 8G 交换空间.</li>
<li>SSH 默认禁止 root 使用密码登录,需要修改<code class="language-plaintext highlighter-rouge">/etc/sshd/sshd_config</code>中的<code class="language-plaintext highlighter-rouge">PermitRootLogin</code>为<code class="language-plaintext highlighter-rouge">yes</code>.添加密钥后记得改回来.</li>
<li>安装<code class="language-plaintext highlighter-rouge">open-vm-tools</code>以使用共享文件夹备份数据.</li>
<li>创建共享文件夹,设置权限为读与写.</li>
</ol>
<h4 id="安装-gitlab">安装 GitLab</h4>
<p>建议安装企业版(ee),不激活附加功能等同于社区版(ce),如果哪天你想升级到企业版,无需重新安装即可原地升级.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt-get <span class="nb">install</span> <span class="nt">-y</span> curl openssh-server ca-certificates <span class="nb">sudo
</span>curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | <span class="nb">sudo </span>bash
apt-get <span class="nb">install </span>gitlab-ee
</code></pre></div></div>
<p>修改 GitLab 配置文件<code class="language-plaintext highlighter-rouge">/etc/gitlab/gitlab.rb</code>,然后运行<code class="language-plaintext highlighter-rouge">gitlab-ctl reconfigure</code>.</p>
<p>使用<code class="language-plaintext highlighter-rouge">gitlab-ctl diff-config</code>可查看修改的选项.</p>
<p>建议修改以下配置:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 如果是家庭用户,注意默认 80 端口被运营商封锁</span>
external_url <span class="s1">'http://你的网址:端口号'</span>
<span class="c"># 使用第三方发信服务可以获得更好的邮件到达率</span>
gitlab_rails[<span class="s1">'gitlab_email_from'</span><span class="o">]</span> <span class="o">=</span> <span class="s1">'example@example.com'</span>
<span class="c"># 备份保存时间,超过这个时间自动删除本地备份</span>
gitlab_rails[<span class="s1">'backup_keep_time'</span><span class="o">]</span> <span class="o">=</span> 604800
<span class="c"># 下面的地址是共享文件夹路径</span>
gitlab_rails[<span class="s1">'backup_upload_connection'</span><span class="o">]</span> <span class="o">=</span> <span class="o">{</span>
<span class="s1">'provider'</span> <span class="o">=></span> <span class="s1">'Local'</span>,
<span class="s1">'lacal_root'</span> <span class="o">=></span> <span class="s1">'/mnt/hgfs/GitLab_data'</span>,
<span class="o">}</span>
<span class="c"># 邮件服务器设置,以阿里云为例</span>
gitlab_rails[<span class="s1">'smtp_address'</span><span class="o">]</span> <span class="o">=</span> <span class="s2">"smtpdm.aliyun.com"</span>
gitlab_rails[<span class="s1">'smtp_port'</span><span class="o">]</span> <span class="o">=</span> 80
gitlab_rails[<span class="s1">'smtp_user_name'</span><span class="o">]</span> <span class="o">=</span> <span class="s2">"你的发件人用户名"</span>
gitlab_rails[<span class="s1">'smtp_password'</span><span class="o">]</span> <span class="o">=</span> <span class="s2">"你的密码"</span>
gitlab_rails[<span class="s1">'smtp_domain'</span><span class="o">]</span> <span class="o">=</span> <span class="s2">"你的网址"</span>
</code></pre></div></div>
<p>设置备份:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>crontab <span class="nt">-e</span>
<span class="c"># 每天02:00执行备份.注意刚才我们已经设置了同步备份文件到 Mac 上的共享文件夹.</span>
<span class="c"># 这样我们就可以直接利用时间机器备份到群晖了.</span>
0 2 <span class="k">*</span> <span class="k">*</span> <span class="k">*</span> /opt/gitlab/bin/gitlab-rake gitlab:backup:create <span class="nv">CRON</span><span class="o">=</span>1
</code></pre></div></div>
<p>路由器中映射端口,输入你的网址测试吧!</p>046569046569@046569.com之前说坑爹的群晖存在自动升级迁移数据失败的问题并给出了解决方案..这段时间陆陆续续也有一些朋友联系我说遇到相同的问题.考虑到群晖的实际技术实力,遂决定自行托管,放弃套件中心中的套件.修复群晖 GitLab 升级失败的问题2018-07-15T14:28:00+08:002018-07-15T14:28:00+08:00https://www.046569.com/2018/07/15/fix-synology-gitlab-upgrade-failed<p>如果你最近使用群晖套件中心的 GitLab( 9.4.4-0050 ) ,并且勾选转换数据库( MariaDB => postgresql ),那么你很可能遇到丢失数据的问题( Version: 10.6.4-0051 ).表现为打开 GitLab 首页提示设置 root 密码,登录后台显示所有项目丢失.</p>
<p>故障的原因是群晖”借鉴”的 <a href="https://github.com/lanyrd/mysql-postgresql-converter">MySQL to PostgreSQL Converter</a> 项目存在<a href="https://github.com/lanyrd/mysql-postgresql-converter/pulls">一些问题</a> .群晖内的具体路径为<code class="language-plaintext highlighter-rouge">/volume1/@appstore/Docker-GitLab/mysql-postgresql-converter/db_converter.py</code>,转换时会发生<code class="language-plaintext highlighter-rouge">UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c</code>错误.截至目前尚有 30 个 PR 未处理.群晖科技在自家稳定版产品中未确认方案普适性,原项目首页强调 <strong>use with care</strong> 被无视,置客户数据安全于不顾,最终导致悲剧发生.后续我会专门谈一谈为什么 synology NAS 是危险的产品,选购群晖是对数据的不负责行为.本篇只说怎么找回你宝贵的数据.</p>
<h3 id="修改-docker-环境变量使用原-mariadb-数据库">修改 docker 环境变量,使用原 MariaDB 数据库</h3>
<ol>
<li>使用 admin 组的账户登录群晖 SSH .<strong><em>警告: 如果你不知道这步怎么操作,本修复指南可能对你来说较复杂,极易出现数据丢失.请向技术人员求助.</em></strong></li>
<li>如果之前没有执行过备份( <code class="language-plaintext highlighter-rouge">bundle exec rake gitlab:backup:create RAILS_ENV=production</code> ),那么执行下备份.路径类似<code class="language-plaintext highlighter-rouge">/volume1/docker/gitlab/</code>.</li>
<li>为 gitlab_user 授权.如果不熟悉 SQL 可以在套件中心中安装 phpMyAdmin ,然后在权限中增加用户账户的 host name 为 <code class="language-plaintext highlighter-rouge">172.17.0.%</code> .</li>
<li>测试数据库权限:
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker <span class="nb">exec</span> <span class="nt">-it</span> synology_gitlab bash <span class="c"># 进入容器终端</span>
mysql <span class="nt">-u</span> gitlab_user <span class="nt">-p</span> <span class="nt">-h</span> 172.17.0.1 <span class="nt">-P</span> 3307 <span class="c"># 测试数据库链接情况</span>
<span class="nb">exit</span> <span class="c"># 退出容器</span>
</code></pre></div> </div>
</li>
<li>套件中心 => 已安装 => GitLab => 停止.</li>
<li>docker => synology_gitlab => 编辑 => 环境变量
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>DB_PORT 3307
DB_TYPE mysql
DB_HOST 172.17.0.1
</code></pre></div> </div>
</li>
<li>套件中心 => 已安装 => GitLab => 启动.</li>
</ol>
<h3 id="修复数据库故障">修复数据库故障</h3>
<p>GitLab 官方明确表示不推荐使用 MariaDB / MySQL 数据库. 群晖由于某种原因仍然在使用 MariaDB 10 .本部分重点解决各类数据库问题.</p>
<ol>
<li>停止 GitLab 服务<code class="language-plaintext highlighter-rouge">service gitlab stop</code>.</li>
<li>登录 MariaDB 或直接使用 phpMyAdmin .让数据库支持长索引.
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">use</span> <span class="n">gitlab</span><span class="p">;</span>
<span class="k">SET</span> <span class="n">storage_engine</span><span class="o">=</span><span class="n">INNODB</span><span class="p">;</span>
<span class="k">SET</span> <span class="k">GLOBAL</span> <span class="n">innodb_file_per_table</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">innodb_file_format</span><span class="o">=</span><span class="n">Barracuda</span><span class="p">,</span> <span class="n">innodb_large_prefix</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span>
<span class="k">SET</span> <span class="k">GLOBAL</span> <span class="n">log_bin_trust_function_creators</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</code></pre></div> </div>
</li>
<li>转换原有数据使用 utf8mb4 编码.注意下面的命令每一条的回显都要作为 SQL 语句再执行.
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">CONCAT</span><span class="p">(</span><span class="s1">'ALTER TABLE `'</span><span class="p">,</span> <span class="k">TABLE_NAME</span><span class="p">,</span><span class="s1">'` ROW_FORMAT=DYNAMIC;'</span><span class="p">)</span> <span class="k">AS</span> <span class="s1">'Copy & run these SQL statements:'</span> <span class="k">FROM</span> <span class="n">INFORMATION_SCHEMA</span><span class="p">.</span><span class="n">TABLES</span> <span class="k">WHERE</span> <span class="n">TABLE_SCHEMA</span><span class="o">=</span><span class="nv">"gitlab"</span> <span class="k">AND</span> <span class="n">TABLE_TYPE</span><span class="o">=</span><span class="nv">"BASE TABLE"</span> <span class="k">AND</span> <span class="n">ROW_FORMAT</span><span class="o">!=</span><span class="nv">"Dynamic"</span><span class="p">;</span>
</code></pre></div> </div>
<p>回显类似</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`abuse_reports`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`appearances`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`application_settings`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`audit_events`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`award_emoji`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`boards`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`broadcast_messages`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`chat_names`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`chat_teams`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_build_trace_section_names`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_build_trace_sections`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_builds`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_group_variables`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_job_artifacts`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipeline_schedule_variables`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipeline_schedules`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipeline_variables`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipelines`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_runner_projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_runners`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_stages`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_trigger_requests`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_triggers`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_variables`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`cluster_platforms_kubernetes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`cluster_projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`cluster_providers_gcp`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`clusters`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`clusters_applications_helm`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`container_repositories`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`conversational_development_index_metrics`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`deploy_keys_projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`deployments`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`emails`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`environments`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`events`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`feature_gates`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`features`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`fork_network_members`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`fork_networks`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`forked_project_links`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gcp_clusters`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gpg_key_subkeys`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gpg_keys`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gpg_signatures`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`group_custom_attributes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`identities`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`issue_assignees`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`issue_metrics`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`issues`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`keys`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`label_links`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`label_priorities`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`labels`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`lfs_objects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`lfs_objects_projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`lists`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`members`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_diff_commits`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_diff_files`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_diffs`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_metrics`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_requests`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_requests_closing_issues`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`milestones`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`namespaces`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`notes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`notification_settings`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_access_grants`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_access_tokens`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_applications`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_openid_requests`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`pages_domains`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`personal_access_tokens`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_authorizations`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_auto_devops`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_custom_attributes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_features`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_group_links`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_import_data`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_statistics`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_branch_merge_access_levels`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_branch_push_access_levels`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_branches`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_tag_create_access_levels`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_tags`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`push_event_payloads`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`redirect_routes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`releases`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`routes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`schema_migrations`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`sent_notifications`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`services`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`snippets`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`spam_logs`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`subscriptions`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`system_note_metadata`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`taggings`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`tags`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`timelogs`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`todos`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`trending_projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`u2f_registrations`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`uploads`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`user_agent_details`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`user_custom_attributes`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`user_synced_attributes_metadata`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`users`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`users_star_projects`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`web_hook_logs`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`web_hooks`</span> <span class="n">ROW_FORMAT</span><span class="o">=</span><span class="k">DYNAMIC</span><span class="p">;</span><span class="s1">');
</span></code></pre></div> </div>
</li>
<li>转换原有数据使用新的表空间( tablespace )格式.注意下面的命令每一条的回显都要作为 SQL 语句再执行.
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SET</span> <span class="n">foreign_key_checks</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">SELECT</span> <span class="n">CONCAT</span><span class="p">(</span><span class="s1">'ALTER TABLE `'</span><span class="p">,</span> <span class="k">TABLE_NAME</span><span class="p">,</span><span class="s1">'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'</span><span class="p">)</span> <span class="k">AS</span> <span class="s1">'Copy & run these SQL statements:'</span> <span class="k">FROM</span> <span class="n">INFORMATION_SCHEMA</span><span class="p">.</span><span class="n">TABLES</span> <span class="k">WHERE</span> <span class="n">TABLE_SCHEMA</span><span class="o">=</span><span class="nv">"gitlab"</span> <span class="k">AND</span> <span class="n">TABLE_COLLATION</span> <span class="o">!=</span> <span class="nv">"utf8mb4_general_ci"</span> <span class="k">AND</span> <span class="n">TABLE_TYPE</span><span class="o">=</span><span class="nv">"BASE TABLE"</span><span class="p">;</span>
</code></pre></div> </div>
<p>回显类似</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`abuse_reports`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`appearances`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`application_settings`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`audit_events`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`award_emoji`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`boards`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`broadcast_messages`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`chat_names`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`chat_teams`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_build_trace_section_names`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_build_trace_sections`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_builds`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_group_variables`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_job_artifacts`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipeline_schedule_variables`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipeline_schedules`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipeline_variables`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_pipelines`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_runner_projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_runners`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_stages`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_trigger_requests`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_triggers`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`ci_variables`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`cluster_platforms_kubernetes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`cluster_projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`cluster_providers_gcp`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`clusters`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`clusters_applications_helm`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`container_repositories`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`conversational_development_index_metrics`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`deploy_keys_projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`deployments`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`emails`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`environments`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`events`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`feature_gates`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`features`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`fork_network_members`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`fork_networks`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`forked_project_links`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gcp_clusters`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gpg_key_subkeys`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gpg_keys`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`gpg_signatures`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`group_custom_attributes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`identities`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`issue_assignees`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`issue_metrics`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`issues`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`keys`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`label_links`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`label_priorities`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`labels`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`lfs_objects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`lfs_objects_projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`lists`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`members`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_diff_commits`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_diff_files`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_diffs`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_request_metrics`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_requests`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`merge_requests_closing_issues`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`milestones`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`namespaces`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`notes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`notification_settings`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_access_grants`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_access_tokens`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_applications`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`oauth_openid_requests`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`pages_domains`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`personal_access_tokens`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_authorizations`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_auto_devops`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_custom_attributes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_features`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_group_links`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_import_data`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`project_statistics`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_branch_merge_access_levels`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_branch_push_access_levels`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_branches`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_tag_create_access_levels`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`protected_tags`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`push_event_payloads`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`redirect_routes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`releases`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`routes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`schema_migrations`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`sent_notifications`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`services`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`snippets`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`spam_logs`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`subscriptions`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`system_note_metadata`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`taggings`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`tags`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`timelogs`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`todos`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`trending_projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`u2f_registrations`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`uploads`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`user_agent_details`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`user_custom_attributes`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`user_synced_attributes_metadata`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`users`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`users_star_projects`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`web_hook_logs`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">ALTER</span> <span class="k">TABLE</span> <span class="nv">`web_hooks`</span> <span class="k">CONVERT</span> <span class="k">TO</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span> <span class="k">COLLATE</span> <span class="n">utf8mb4_general_ci</span><span class="p">;</span>
<span class="k">SET</span> <span class="n">foreign_key_checks</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</code></pre></div> </div>
</li>
<li>执行数据库限制任务.
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">exec </span>rake add_limits_mysql <span class="nv">RAILS_ENV</span><span class="o">=</span>production
</code></pre></div> </div>
</li>
<li>修改数据库迁移任务.由于 GitLab 官方要求不允许跨多个小版本升级,所以我们会遇到一些奇怪的错误,这里给出一些修复方案,我只遇到了一个.
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Mysql2::Error: Index column size too large. The maximum column size is 767 bytes.: CREATE UNIQUE INDEX <span class="sb">`</span>index_lfs_file_locks_on_project_id_and_path<span class="sb">`</span> ON <span class="sb">`</span>lfs_file_locks<span class="sb">`</span> <span class="o">(</span><span class="sb">`</span>project_id<span class="sb">`</span>, <span class="sb">`</span>path<span class="sb">`</span><span class="o">)</span>
</code></pre></div> </div>
<p>解决方案:</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">use</span> <span class="n">gitlab</span><span class="p">;</span>
<span class="k">DROP</span> <span class="k">TABLE</span> <span class="n">lfs_file_locks</span><span class="p">;</span>
</code></pre></div> </div>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># db/migrate/20180116193854_create_lfs_file_locks.rb</span>
<span class="c1"># create_table :lfs_file_locks do |t| 修改为</span>
<span class="n">create_table</span> <span class="ss">:lfs_file_locks</span><span class="p">,</span> <span class="ss">options: </span><span class="s1">'ROW_FORMAT=DYNAMIC'</span> <span class="k">do</span> <span class="o">|</span><span class="n">t</span><span class="o">|</span>
</code></pre></div> </div>
</li>
<li>执行数据库迁移.
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">exec </span>rake db:migrate
</code></pre></div> </div>
</li>
</ol>
<h3 id="预编译资源">预编译资源</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">exec </span>rake gettext:compile <span class="nv">RAILS_ENV</span><span class="o">=</span>production
bundle <span class="nb">exec </span>rake yarn:install gitlab:assets:clean gitlab:assets:compile <span class="nv">RAILS_ENV</span><span class="o">=</span>production <span class="nv">NODE_ENV</span><span class="o">=</span>production
bundle <span class="nb">exec </span>rake cache:clear <span class="nv">RAILS_ENV</span><span class="o">=</span>production
</code></pre></div></div>
<h3 id="备份与恢复">备份与恢复</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">exec </span>rake gitlab:backup:create <span class="nv">RAILS_ENV</span><span class="o">=</span>production <span class="c"># 你会找到一个类似 /home/git/data/backups/1531046569_2018_07_14_10.6.4_gitlab_backup.tar 的文件</span>
bundle <span class="nb">exec </span>rake gitlab:backup:restore <span class="nv">RAILS_ENV</span><span class="o">=</span>production
</code></pre></div></div>
<h3 id="参考资料">参考资料</h3>
<p><a href="https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/database_mysql.md">GitLab 使用 MySQL 数据库的注意事项</a></p>
<p><a href="https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/update">GitLab 升级文档</a></p>046569046569@046569.com如果你最近使用群晖套件中心的 GitLab( 9.4.4-0050 ) ,并且勾选转换数据库( MariaDB => postgresql ),那么你很可能遇到丢失数据的问题( Version: 10.6.4-0051 ).表现为打开 GitLab 首页提示设置 root 密码,登录后台显示所有项目丢失.一行代码与两个漏洞2018-05-26T00:08:00+08:002018-05-26T00:08:00+08:00https://www.046569.com/2018/05/26/one-line-of-code-contains-two-vulnerabilities<p>某日帮客户处理后台问题,途中需要阅读代码,随眼一扫,感觉问题太多,以管理员登录后台为例</p>
<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$data</span><span class="p">[</span><span class="s1">'admin_pass'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">md5</span><span class="p">(</span><span class="nb">strtolower</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">[</span><span class="s1">'admin_pass'</span><span class="p">]));</span>
</code></pre></div></div>
<p>短短的一行代码可以看到其中包含两个缺陷:</p>
<h3 id="将用户输入转为小写导致密码不区分大小写">将用户输入转为小写,导致密码不区分大小写.</h3>
<p>以允许使用英文和数字的 8 位密码为例,区分大小写有 218340105584896 种可能,不区分大小写只有 2821109907456 种可能,两者差距约为 77 倍,增加了密码被破解的可能性.</p>
<h3 id="没有正确使用加密算法">没有正确使用加密算法.</h3>
<p>虽然 MD5 是一种不可逆的算法,但是网络安全人员通过彩虹表可以逆向查询到原始密码.破解的大致流程是这样的,首先计算出所有密码的可能性(原文),然后进行加密运算得到密文.当需要破解某个密码的时候,直接查询密文比对出原文即可得知明文密码.</p>
<p>为了对抗彩虹表攻击,开发人员曾使用增加 salt 的方式来增加攻击者成本.</p>
<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">md5</span><span class="p">(</span><span class="s1">'password'</span> <span class="mf">.</span> <span class="s1">'salt'</span><span class="p">)</span>
</code></pre></div></div>
<p>知名论坛程序 Discuz! 就使用了类似的方式.一时间开发人员纷纷加盐,活脱脱咸菜世家的节奏.</p>
<h3 id="现在的解决方案">现在的解决方案.</h3>
<p>都 8102 年了,对技术稍微有点追求的开发者都在使用 <code class="language-plaintext highlighter-rouge">bcrypt</code> 了!</p>046569046569@046569.com某日帮客户处理后台问题,途中需要阅读代码,随眼一扫,感觉问题太多,以管理员登录后台为例写在冥王峡谷上市之前2018-04-20T17:33:00+08:002018-04-20T17:33:00+08:00https://www.046569.com/2018/04/20/nuc6i7kyk<p>我对迷你尺寸的 PC 一直情有独钟,尤其是 NUC :巴掌大的体积,媲美台式机的性能.符合我对小钢炮的全部想象.前些日子听说 Intel 和 AMD 联手打造了新一代旗舰 NUC8i7HVK ,于是叨咕两句权当纪念兢兢业业陪伴我加班的小骷髅.</p>
<h3 id="没有跑分没有对比没有开箱只有碎碎念">没有跑分,没有对比,没有开箱,只有碎碎念.</h3>
<p>前年因工作需要,编译和读写大文件成为了我的日常.主力机 MacBook Pro ( 2014 Mid )有些力不从心,耗时太久.曾帮网友配了一台骷髅峡谷,对它的表现印象极其深刻,于是拔草.</p>
<p>整机配置为:</p>
<table class="table table-striped">
<tr>
<td>CPU + 主板</td>
<td>Intel NUC6i7KYK</td>
</tr>
<tr>
<td>硬盘</td>
<td>samsung 850 EVO 500G</td>
</tr>
<tr>
<td>内存</td>
<td>金士顿骇客神条 Impact 系列 DDR4 2133 32G ( 16G * 2)</td>
</tr>
</table>
<p>在后续的使用中,标压满血的 i7-6770HQ 表现凶残.原本需要 30 分钟的工作不到 5 分钟就完成了.对此我非常满意.这里我强行按捺怒火忍住了对 Windows 10 <s>( Bug 10 )</s>的吐槽.</p>
<p>槽点不多.一是被 Intel 寄予厚望的锐炬显卡表现差强人意,在运行 FFX 时 1080P 的分辨率下也无法开启最高特效.二是经常会听到如同直升机起飞的噪音,听得久了习惯了,感觉很踏实.小家伙仿佛在和我说:嘿,我在努力工作,你也别偷懒.让它干的总是累活,有时会产生雇佣童工的错觉.不知道 ITX 神教的信徒听到这段话会作何感想.</p>
<p>后来换了新电脑,性能强大,骷髅就闲置了.本着物尽其用的原则,帮它寻了新的下家,至此阶段性目标圆满达成,本季终.</p>046569046569@046569.com我对迷你尺寸的 PC 一直情有独钟,尤其是 NUC :巴掌大的体积,媲美台式机的性能.符合我对小钢炮的全部想象.前些日子听说 Intel 和 AMD 联手打造了新一代旗舰 NUC8i7HVK ,于是叨咕两句权当纪念兢兢业业陪伴我加班的小骷髅.