diff --git a/ee/lib/ee/gitlab/database.rb b/ee/lib/ee/gitlab/database.rb
index e50ec8bbfa204bb8fcc1463a826d9ca678786932..24037305499ebc3cb2e176fd2da8d07a073ce36f 100644
--- a/ee/lib/ee/gitlab/database.rb
+++ b/ee/lib/ee/gitlab/database.rb
@@ -10,7 +10,7 @@ module Database
 
         override :read_only?
         def read_only?
-          ::Gitlab::Geo.secondary?
+          ::Gitlab::Geo.secondary? || ::Gitlab.maintenance_mode?
         end
 
         def healthy?
diff --git a/ee/spec/lib/ee/gitlab/database_spec.rb b/ee/spec/lib/ee/gitlab/database_spec.rb
index 7193b1ef8b03360d1f47df710a4ef90b5461e18a..daa2691b2dba98936176a9170bafd8d335281b9a 100644
--- a/ee/spec/lib/ee/gitlab/database_spec.rb
+++ b/ee/spec/lib/ee/gitlab/database_spec.rb
@@ -34,6 +34,16 @@
         expect(described_class.read_only?).to be_falsey
       end
     end
+
+    context 'in maintenance mode' do
+      before do
+        stub_application_setting(maintenance_mode: true)
+      end
+
+      it 'returns true' do
+        expect(described_class.read_only?).to be_truthy
+      end
+    end
   end
 
   describe '.healthy?' do